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

В моем 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 может подавить форму входа в систему. Однако я пытаюсь понять, есть ли способ сделать это лучше.


person Krystian Cybulski    schedule 28.10.2011    source источник
comment
Возможно, вам поможет этот вопрос: stackoverflow.com/questions/2882490/   -  person Razvi    schedule 28.10.2011
comment
Очень близко. Однако моя проблема в том, что этот конкретный шаблон вызывается из TemplateView. В таком случае запрос не передается в шаблон, и через него невозможно получить URL-адрес.   -  person Krystian Cybulski    schedule 28.10.2011


Ответы (1)


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

Ваш 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 %}
person Daniel Roseman    schedule 28.10.2011
comment
Не думал об этом. Хорошее предложение. Решает вопрос. Я оставлю это открытым еще немного, так как мне любопытно, есть ли способ проверить то, что я упомянул в исходном сообщении. - person Krystian Cybulski; 28.10.2011