Python: Как изменить заголовок страницы в Django на основе переменной?

Я работаю с приложением Django, которое использует один и тот же шаблон для разных "страниц" - в основном, страница может быть либо "Создать запись", либо "Редактировать запись". Страница меняется в зависимости от следующих параметров:

{% if props.data.id %}
 Edit
{% else %}
 Create
{% endif %}

Логика такова: если для этой записи существует id, то страница будет отображаться как страница редактирования. В противном случае страница будет отображаться как страница создания.

Я хочу, чтобы заголовок страницы менялся в зависимости от одних и тех же параметров. Таким образом, две версии страницы должны быть:

Create Entry
Edit Entry

Вот код, который я сейчас пробую:

{% if props.data.id %}
 {% with action='Edit' %}
 {% endwith %}
{% else %}
 {% with action='Create' %} 
 {% endwith %}
{% endif %}

{% block title %} {{ action }} Entry {% endblock %}

Я пока не смог заставить это работать. Нахожусь ли я на правильном пути? Я использовал 'with', так как это, кажется, рекомендуемый способ установки переменных в Django, но мне интересно, есть ли лучший способ сделать это.

В документации к with упоминается:

Наполняемая переменная доступна только между тегами {% with %} и {% endwith %}.

На самом деле вам не нужно устанавливать переменную для этого, вы можете напрямую сделать:

{% block title %} {% if props.data.id %} Edit {% else %} Create {% endif %} {% endblock %}

Для простой замены заголовка это не требуется, но вы также можете передать переменную как часть контекста шаблона, например:

action = 'Edit' if props.data.id else 'Create'
return render(request, 'polls/index.html', {'action': action })

и тогда вы сможете использовать его как {{ action }} во всем шаблоне.

Для более сложной логики или поведения, вы можете ознакомиться с предложениями в этом вопросе - Django {% with %} tags within {% if %} {% else %} тегов?

Вернуться на верх