首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >假设我的主页中有一个搜索框和一个显示结果的结果页面,我如何在另一个视图中显示django-filter结果?

假设我的主页中有一个搜索框和一个显示结果的结果页面,我如何在另一个视图中显示django-filter结果?
EN

Stack Overflow用户
提问于 2020-06-23 21:56:38
回答 1查看 114关注 0票数 0

我已经在我的许多项目中使用了django-filters,在这些项目中,搜索表单与结果列表在同一个页面上,而且工作得很好,但是现在我面临这样的情况:我在主页上有一个搜索框,而在其他地方有一个结果页面,我如何将过滤后的结果传递到我的结果页面的视图中?

EN

回答 1

Stack Overflow用户

发布于 2020-06-23 22:57:48

你可以选择几种不同的方法。

一种想法是,如果请求中存在搜索数据,则只呈现不同的模板。

由于你没有发布任何你自己的代码,我们不知道你是如何命名或设置的,所以这里是我所指的这类事情的一个快速草图。

代码语言:javascript
复制
class SomeView(View):
    template_name = 'some_view.html'
    results_template_name = 'some_view_results.html'
    
    def get(self, request, *args, **kwargs):
        if not request.GET.get('q'):
            return render(request, self.template_name)
        results = SearchFilter(request.GET)
        context = {'results': results}
        return render(request, self.results_template_name, context)

这将是最简单的解决方案之一。您甚至可以不使用一个模板,而只是有条件地调度一些渲染,以确定results是否在上下文中。

另一种方法是做一个完整的redirect,并将您需要的任何数据作为kwargs传递给您正在调用的任何视图。但这是一种混乱和不必要的。

最好的解决方案是连接一个新的ResultsView端点,将筛选移动到该视图,并将该URL的引用放入模板的表单节点中。这就需要像这样的东西。

代码语言:javascript
复制
<form method="GET" action="{% url search %}">
  <input type="text" id="search" name="q" placeholder="Search">
</form>

假设您已经在URL配置中将ResultsView命名为search

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62536458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档