#django #django-templates
#джанго #django-шаблоны
Вопрос:
Я пишу приложение, в котором пользователь может выбрать один из нескольких инструментов для анализа данных и открыть его на панели на главной странице. Можно ли использовать django «extends» и определить каждый инструмент в разных файлах?
Минимальный пример того, с чем я борюсь, был бы таким:
base.html
<div>
{% block left_panel %}
left block
{% endblock content%}
</div>
<div>
{% block right_panel %}
right block
{% endblock %}
</div>
и примеры инструментов left_panel и right_panel:
left1.html
{% extends "base.html" %}
{% block left_panel %}
<p>TEST left 1</p>
{% endblock %}
right1.html
{% extends "base.html" %}
{% block right_panel %}
<p>TEST right 1</p>
{% endblock %}
Есть ли способ визуализировать base.html с перезаписанными обоими блоками?
Ответ №1:
Я считаю, что лучший способ реализовать ваше требование — создать новый шаблон, который расширяет base.html и включает в себя left1.html и right1.html . Что-то вроде этого:
{% расширяет "base.html " %} {% блокировать левую панель %} {% включить "left1.html " %} {% содержимое конечного блока%} {% блокировать правую панель %} {% включить "right1.html " %} {% endblock %}
Обновление на основе комментария OP: на самом деле вам нужен только один настраиваемый шаблон, а не 100. Допустим, что на основе инструментов, выбранных пользователем, ваше представление передает left_tool
right_tool
переменные контекста и в ваш шаблон. Теперь вы можете легко сделать что-то вроде этого:
{% блокировать левую панель %} {% if left_tool == "tool1" %} {% включить "left1.html " %} {% elif left_tool == "tool2" %}} {% включить "left2.html " %} и т.д... {% else %} {% включить "left10.html " %} {% endif %} {% содержимое конечного блока%}
Вы сделаете то же самое с правой панелью. Конечно, вышесказанное немного наивно и определенно не СУХО — вместо этого вы могли бы, например, сгенерировать имя шаблона, который будет включен в представление, и передать его непосредственно в шаблон или использовать пользовательский узел и т.д.
Комментарии:
1. Проблема в том, что для каждой панели есть 10 разных инструментов. Это означает 100 разных шаблонов, как вы предлагаете.