我已经在我的许多项目中使用了django-filters,在这些项目中,搜索表单与结果列表在同一个页面上,而且工作得很好,但是现在我面临这样的情况:我在主页上有一个搜索框,而在其他地方有一个结果页面,我如何将过滤后的结果传递到我的结果页面的视图中?
发布于 2020-06-23 22:57:48
你可以选择几种不同的方法。
一种想法是,如果请求中存在搜索数据,则只呈现不同的模板。
由于你没有发布任何你自己的代码,我们不知道你是如何命名或设置的,所以这里是我所指的这类事情的一个快速草图。
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的引用放入模板的表单节点中。这就需要像这样的东西。
<form method="GET" action="{% url search %}">
<input type="text" id="search" name="q" placeholder="Search">
</form>假设您已经在URL配置中将ResultsView命名为search。
https://stackoverflow.com/questions/62536458
复制相似问题