djangoテンプレートは、その名前付きURLを見つけることができますか?または、どのテンプレートがそれを拡張しているかを基本テンプレートが知ることができますか?

私のURLConfでは、URLをきちんと名前を付けて、逆引き参照を行い、すべてをDRYに保つことができます。

私のすべてのテンプレートは base.html という名前のユニバーサルテンプレートを拡張しています。 base.html では、多くのHTMLフレームワークの中で、私はログインフォームを表示しています。

Djangoが提供する auth_views.login ビューを使用して独自のテンプレート login.html を表示するビューもあります。このテンプレートは、他のすべてのテンプレートと同様に、base.htmlテンプレートを拡張します。

このような場合、 base.html テンプレートはログインフォームを表示しません( login.html テンプレートは既にログインフォームを表示しています)。これを行うには、 base.html login.html の拡張に使用されていることを知っている必要があります。拡張されるhtmlの名前は 'myapp-login' です。

これを行う方法を提案できますか?私は suppress_header_login_form varを含む特別なコンテキストで auth_views.login を呼び出す独自のビューを作成することを考えています。このvarに基づいて、 base.html テンプレートはログインフォームを抑制することができます。しかし、これを達成するためのより良い方法があるかどうかを確認しようとしています。

1
とても近い。しかし、私の問題は、この特定のテンプレートがTemplateViewから呼び出されることです。そのような場合、リクエストはテンプレートに渡されず、URLを取得する方法はありません。
追加された 著者 Krystian Cybulski,
多分この質問はあなたを助けるかもしれません: stackoverflow.com/questions/2882490/…
追加された 著者 Razvi,

1 答え

テンプレートの継承とブロックでこれを管理できます。

あなたの base.html は、ログイン用のHTMLを囲む login というブロックを定義し、空のブロックを上書きする 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 %}
4
追加された
これを考えなかった。素晴らしい提案。問題を解決します。元の投稿で言及したことを実際に確認する方法があるかどうか不思議ですから、これをもう少し開いておきます。
追加された 著者 Krystian Cybulski,