【问题标题】:Django ListView pagination using Form使用表单的 Django ListView 分页
【发布时间】:2013-04-15 03:01:06
【问题描述】:

我正在尝试将“表单”作为上下文传递,我的代码:

class BlogSearchView(ListView):
    model = Blog
    paginate_by = 20
    template_name = "base/blog_search.html"

    def get_queryset(self):
        qset = super(BlogSearchView, self).get_queryset()
        new_data = self.request.GET.copy()
        form = BlogSearchForm(new_data)
        if form.is_valid():
            search_term = form.cleaned_data['q']#>> how to insert this in template
            if search_term:
                qset = qset.filter(Q(title__icontains=search_term)|
                                   Q(body__icontains=search_term))
            else:
                qset = []
        else:
            form = BlogSearchForm() #>> how to insert this in template
        return qset

尝试使用 get_context_data 但出现错误。

【问题讨论】:

  • 我正在使用 self.get_context_data() 但不起作用。

标签: django listview django-generic-views


【解决方案1】:

您需要在您的BlogSearchView 中覆盖get_context_data

快速解决方案:

class BlogSearchView(ListView):

    def get_queryset():
        ...
        #Your queryset definition
        self.search_term = search_term
        self.form = form
        return qset

    def get_context_data(self, **kwargs):
        context = super(BlogSearchView, self).get_context_data(**kwargs)
        context['search_term'] = self.search_term
        context['form'] = self.form
        return context

然后您可以在模板中使用search_termform

【讨论】:

  • 为什么不工作 form = BlogSearchForm(new_data) 转换 self.form = BlogSearchForm(new_data)
猜你喜欢
  • 2013-02-04
  • 2022-10-05
  • 2020-04-01
  • 1970-01-01
  • 2014-11-29
  • 2020-10-19
  • 2021-08-09
  • 2019-07-17
  • 2019-08-14
相关资源
最近更新 更多