Django-tables2 发送参数到自定义table模板
Django-tables2 send parameters to custom table template
我正在尝试使用自定义 table 模板将 django-filter
字段嵌入到我的 table 中。所以我将django-tables2
bootstrap.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 %}
我正在尝试使用自定义 table 模板将 django-filter
字段嵌入到我的 table 中。所以我将django-tables2
bootstrap.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 %}