2011-10-28 6 views
1

私のURLConfには、URLをきちんと名前を付けて、逆引き参照をしてすべてをDRYにしておくことができます。djangoテンプレートは、その名前付きURLを見つけることができますか、またはどのテンプレートがそれを拡張しているかを基本テンプレートが知ることができますか?

私のすべてのテンプレートは、汎用テンプレートbase.htmlを拡張しています。 base.htmlでは、多くのHTMLフレームワークの中で、私はログインフォームを表示しています。

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

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

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

+0

たぶん、この質問はあなたを助けるかもしれない:http://stackoverflow.com/questions/2882490/get-the-current-url-within-a-django-template – Razvi

+0

非常に近いです。しかし、私の問題は、この特定のテンプレートがTemplateViewから呼び出されることです。そのような場合、リクエストはテンプレートに渡されず、URLを取得する方法はありません。 –

答えて

4

テンプレートの継承とブロックでこれを管理できます。あなたの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 %} 
+0

これは考えていません。素晴らしい提案。問題を解決します。元の投稿で言及したことを実際に確認する方法があるかどうか不思議ですから、これをもう少し開いておきます。 –

関連する問題