Django self.request 不通过查询过滤

我试图在我的搜索模板中实现一些基本搜索,但是当我搜索时,它在 URL 中工作,但不会更改模板中的任何帖子。


意见:


class SearchListView(ListView):

    model = Post

    template_name = "public/search.html"


    def get_context_data(self, **kwargs):

        context = super(SearchListView, self).get_context_data(**kwargs)

        context['queryset'] = Post.objects.filter(live=True)

        context['category'] = Category.objects.all()

        return context


    def SearchListView(request):

        query = self.request.GET.get("q")

        if query:

            queryset = queryset.filter(title_icontains=query)

我不确定这是否是正确的设置方式,因为我正在观看的教程没有使用基于类的视图。


HTML:


<div class="container mt-5 mb-5">

    <div class="banner-search-main mb-5">

        <form method='GET' action=''>

            <p class="text-muted">Keywords:</p>

            <input type="text" name='q' class="homebanner-search" placeholder="Enter your keywords" value='{{ request.get.q }}'>

            <input type="submit" value="search">

        </form>

    </div>

    <div class="detail-container">

        {% for post in queryset %}

            <div class="col-sm card-container">

                <a href="{% url 'post-detail' post.slug %}">

                    <div class="main-card">

                        <div class="main-card-img">

                            <img src="https://via.placeholder.com/270x150" class="card-img-top" alt="#">

                        </div>

                    </div>

                </a>

            </div>

        {% endfor %}

    </div>

</div>

例子:

http://img2.mukewang.com/61baf07300017f5309911137.jpg

温温酱
浏览 267回答 3
3回答

米脂

带有 get_queryset 方法的 ListViewclass SearchListView(ListView):&nbsp; &nbsp; model = Post&nbsp; &nbsp; template_name = "public/search.html"&nbsp; &nbsp; def get_queryset(self):&nbsp; &nbsp; &nbsp; &nbsp;queryset = super().get_queryset().filter(live=True)&nbsp; &nbsp; &nbsp; &nbsp;query = self.request.GET.get("q")&nbsp; &nbsp; &nbsp; &nbsp;if query:&nbsp; &nbsp; &nbsp; &nbsp; queryset = queryset.filter(title__icontains=query)&nbsp; &nbsp; &nbsp; &nbsp;return queryset&nbsp; &nbsp; def get_context_data(self, **kwargs):&nbsp; &nbsp; &nbsp; &nbsp;context = super(SearchListView, self).get_context_data(**kwargs)&nbsp; &nbsp; &nbsp; &nbsp;context['queryset'] = self.get_queryset()&nbsp; &nbsp; &nbsp; &nbsp;context['category'] = Category.objects.all()&nbsp; &nbsp; &nbsp; &nbsp;return context

白板的微信

首先,我建议访问这个以查看基于类的视图的基础结构。class SearchListView(ListView):&nbsp; &nbsp; model = Post&nbsp; &nbsp; template_name = "public/search.html"&nbsp; &nbsp; success_url ='where you want to redirect'&nbsp; &nbsp; def get_queryset(self): # method that returns the queryset is `get_queryset`&nbsp; &nbsp; &nbsp; &nbsp;query = self.request.GET.get("q")&nbsp; &nbsp; &nbsp; &nbsp;if query:&nbsp; &nbsp; &nbsp; &nbsp; queryset = self.model.objects.filter(title__icontains=query) # double underscore not single&nbsp; &nbsp; &nbsp; &nbsp;return queryset&nbsp; &nbsp; def get_context_data(self, **kwargs):&nbsp; &nbsp; &nbsp; &nbsp;context = super(SearchListView, self).get_context_data(**kwargs)&nbsp; &nbsp; &nbsp; &nbsp;context['queryset'] = self.get_queryset()&nbsp; &nbsp; &nbsp; &nbsp;context['category'] = Category.objects.all()&nbsp; &nbsp; &nbsp; &nbsp;return context

慕森王

您的问题是您在类中创建了一个随机函数,该函数不会覆盖任何内容。您要做的是覆盖get_queryset()。class SearchListView(ListView):&nbsp; &nbsp; model = Post&nbsp; &nbsp; template_name = "public/search.html"&nbsp; &nbsp; def get_context_data(self, **kwargs):&nbsp; &nbsp; &nbsp; &nbsp; context = super(SearchListView, self).get_context_data(**kwargs)&nbsp; &nbsp; &nbsp; &nbsp; context['queryset'] = self.get_queryset()&nbsp; &nbsp; &nbsp; &nbsp; context['category'] = Category.objects.all()&nbsp; &nbsp; &nbsp; &nbsp; return context&nbsp; &nbsp; def get_queryset(self):&nbsp; &nbsp; &nbsp; &nbsp; queryset = super().get_queryset().filter(live=True)&nbsp; &nbsp; &nbsp; &nbsp; query = self.request.GET.get("q")&nbsp; &nbsp; &nbsp; &nbsp; if query:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; queryset = queryset.filter(title__icontains=query)&nbsp; &nbsp; &nbsp; &nbsp; return queryset
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python