Django-tables2 发送参数到自定义table模板

Django-tables2 send parameters to custom table template

我正在尝试使用自定义 table 模板将 django-filter 字段嵌入到我的 table 中。所以我将django-tables2bootstrap.html模板复制到一个新文件custom_table.html中。然后我在 thead 部分添加了以下代码:

     {% if filter %}
       <tr>
          {% for filter_field in filter.form.fields %}
              <td>
                 {{ filter_field }}
              </td>
          {% endfor %}
          <td>
             <button class="login100-form-btn" type="submit">Filter</button>
          </td>
       </tr>
    {% endif %}

所以问题是:如何将 filter 发送到 table 模板?

您可以将query paramters发送到服务器,并使用filtered_queryset构造table。例如:

#views.py
def your_view(request):
    filter = ModelFilter(request.GET, queryset=Model.objects.all())

    <b>filtered_queryset = filter.qs</b>
    # pass filtered_queryset to your table
    table = SimpleTable(filtered_queryset)
    return render(request, 'table.html', {'table': table})
</pre>
		

我解决了这个问题。我已经覆盖了视图的 get_context_data 函数:

    def get_context_data(self, **kwargs):
   
         context = super().get_context_data(**kwargs)
         table = self.get_table(**self.get_table_kwargs())
         table.filter = self.filterset
         context[self.get_context_table_name(table)] = table
         return context

这样,我就可以通过以下代码在我的自定义table模板中使用过滤器了:

               {% if table.filter %}

                <tr>
                    <form action="" method="get" class="form-inline">
                        {% csrf_token %}
                        {% for field_form in table.filter.form %}
                        <th>
                            {{field_form}}
                        </th>
                        {% endfor %}
                        <th>
                            <button class="btn" type="submit">Filter</button>
                        </th>
                    </form>
                </tr>
                {% endif %}