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 类的主要内容,如果未能解决你的问题,请参考以下文章

Django 在模板中使用两个不同的数据集填充表

使用 CBV 在 Django 中的一个视图/模板中的两个模型表单

如何在同一个模板中使用两个不同的 Django Form?

Python Django 无法在一个模板中显示两个表单

如何比较 Django 模板中的两个查询集?

Django DRY - 如何在 Django 模板中扩展两个 .html 文件?