Django 在一个模板中使用两个 FilterView 类
Posted
技术标签:
【中文标题】Django 在一个模板中使用两个 FilterView 类【英文标题】:Django To use two FilterView classes in one template 【发布时间】:2022-01-21 20:41:57 【问题描述】:我正在主窗口中使用 FilterView 创建一个搜索表单。 在主窗口的搜索表单中双击输入表单,显示模态框。 我想在模态中显示另一个 FilterView 类。 这两个FilterView的类在它们所引用的模型、过滤器和表单上是不同的。 如何实现?
Views.py
class Filter1(FilterView):
model = Model1
filterset_class = Filter1
template_name = 'filter.html'
class Filter2(FilterView):
model = Model2
filterset_class = Filter2
template_name = 'filter.html'
HTML(模板)
<form action="" method="get">
<div class="row">
filter.form|crispy <-I want to use class filter 1
</div>
<div id="myModal" class="modal fade" tabindex="-1" role="dialog">
・・・
filter.form|crispy <- I want to use class filter 2
</div>
【问题讨论】:
【参考方案1】:你不能那样使用它。一个请求一次只会调用一个后端 API/url 并返回一个响应。您可以做的是在一个响应中将过滤器作为上下文发送。例如:
filter1 = Filter1()
filter2 = Filter2()
context =
'filter1': filter1,
'filter2': filter2,
'result': result,
return render(request, '<your template name>', context)
这应该可以解决您的问题。或者,您可以在单击模态按钮时使用 javascript 进行 API 调用,并使用单独的 URL 路由为模态中的过滤器获取 JSON 响应。使用 JavaScript 并发出 AJAX 请求是推荐的方法,因为它会减少一次调用中返回的数据量,并且不会在不需要时在响应中保留不必要的文本。
【讨论】:
以上是关于Django 在一个模板中使用两个 FilterView 类的主要内容,如果未能解决你的问题,请参考以下文章