Может ли шаблон django узнать его названный URL или базовый шаблон может узнать, какой шаблон расширяет его? - PullRequest
1 голос
/ 28 октября 2011

В моем URLConf мои URL-адреса аккуратно названы, поэтому я могу выполнять обратный поиск и сохранять все СУХИМЫМ.

Все мои шаблоны расширяют универсальный шаблон с именем base.html. В base.html, среди множества HTML-фреймворков, я отображаю форму входа.

У меня также есть специальное представление, которое использует предоставленное Django представление auth_views.login, которое отображает мой пользовательский шаблон login.html. Этот шаблон, как и все остальные, расширяет шаблон base.html.

В подобных случаях мне бы хотелось, чтобы шаблон base.html не отображал свою форму входа (шаблон login.html уже отображает форму входа). Для этого base.html необходимо либо знать, что он используется для расширения login.html, либо знать, что именованный URL, в результате которого был расширен base.html, имеет имя 'myapp-login'.

Можете ли вы предложить способ сделать это? Я имею в виду написание своего собственного представления, которое вызовет auth_views.login с дополнительным контекстом, включающим suppress_header_login_form var. На основании этой переменной шаблон base.html может подавить форму входа. Тем не менее, я пытаюсь выяснить, есть ли лучший способ сделать это.

1 Ответ

4 голосов
/ 28 октября 2011

Вы можете управлять этим с помощью наследования шаблонов и блоков.

Ваш base.html определяет блок с именем login, который окружает HTML-код для входа в систему - и ваши login.html переопределяют этот блок пустымверсия:

base.html:

{% block login %}
    ... login form here ...
{% endblock %}

{% block main %}
{% endblock %}

login.html:

{% extends "base.html" %}

{% block login %}
{% endblock %}

{% block main %}
   ... real login form here ...
{% endblock %}
...