У меня была похожая проблема. У меня есть шаблон таблицы с фильтром, который имеет форму
{% extends 'base.html' %}
{% include 'filtered_table.html' %}
где Filter_table.html:
{% load render_table from django_tables2 %}
<div class="panel-body" >
<form method='GET'>
<div class="search-form" style="border: 1px solid #000000; background-color:#a3ffaf; overflow: auto;">
{% block render_form %}
{% for field in filter.form %}
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% endfor %}
{% endblock %}
<input type='submit' value='Filter' />
|
Displaying {{ filter.qs.count }} of {{ filter.queryset.count }} {{ object_name }}s.
|
<a href='{{ request.path }}' >Clear</a> <p>
</div>
{% if table %}
{% render_table table %}
{% endif %}
</form>
</div>
Я могу захотеть специально изготовить форму вручную, например, написав каждое поле следующим образом:
{% block render_form %}
{{ filter.form.field1.errors }}
{{ filter.form.field1.label_tag }}
{{ filter.form.field1 }}
<p>
{{ filter.form.field2.errors }}
{{ filter.form.field2.label_tag }}
{{ filter.form.field2 }}
{% endblock %}
К сожалению, из-за того, что я не могу дважды «расширить», я не могу получить базовый макет и настроить отфильтрованную таблицу. Таким образом, уродливый (потому что разбивает структуру HTML пополам) способ сделать это - просто определить begin_filtered_table.html и end_filtered_table.html . Затем в настраиваемом случае у меня есть два включения обертывания настройки, а для ненастроенного случая Filter_form.html определяется следующим образом:
{% include "begin_filtered_table.html" %}
{% for field in filter.form %}
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% endfor %}
{% include "end_filtered_table.html" %}
Это решает проблему за счет грубости. Было бы намного проще просто разрешить множественные расширения.