たとえば、url '^/accounts/password/reset/$'
からDjango.contrib.auth.views.password_reset
コンテキスト内のテンプレートファイル名を使用しますが、コンテキストの詳細を送信する必要があると思います。
パスワードのリセットと変更の各ビューに追加するコンテキストを正確に知る必要があります。
Django.contrib.auth.views.password_reset のソースを見ると、 RequestContext
を使用していることがわかります。要するに、コンテキストプロセッサを使用してコンテキストを変更し、必要な情報を注入できる場合があります。
B-listには、優れた コンテキストプロセッサの紹介 があります。
編集(実際の質問が何であるかについて混乱しているようです):
password_reset
はtemplate_name
という名前のパラメーターを取ることがわかります。
def password_reset(request, is_admin_site=False,
template_name='registration/password_reset_form.html',
email_template_name='registration/password_reset_email.html',
password_reset_form=PasswordResetForm,
token_generator=default_token_generator,
post_reset_redirect=None):
詳細については、 password_reset を確認してください。
...したがって、urls.pyは次のようになります。
from Django.conf.urls.defaults import *
from Django.contrib.auth.views import password_reset
urlpatterns = patterns('',
(r'^/accounts/password/reset/$', password_reset, {'template_name': 'my_templates/password_reset.html'}),
...
)
Django.contrib.auth.views.password_reset
は、キーワード引数'/accounts/password/reset'
と一致するtemplate_name = 'my_templates/password_reset.html'
に一致するURLに対して呼び出されます。
それ以外の場合は、password_reset
ビューがそれ自体を処理するため、コンテキストを提供する必要はありません。使用可能なコンテキストを確認する場合は、TemplateSyntax
エラーをトリガーし、スタックトレースを調べて、context
という名前のローカル変数を持つフレームを見つけます。コンテキストを変更する場合は、コンテキストプロセッサについて上記で説明したことがおそらく実行方法です。
要約すると、独自のテンプレートを使用するには何をする必要がありますか?ビューが呼び出されたときに、ビューにtemplate_name
キーワード引数を提供します。 URLパターンTupleの3番目のメンバーとして辞書を含めることにより、ビューにキーワード引数を提供できます。
この記事を強くお勧めします。
差し込んだだけで機能した
http://garmoncheg.blogspot.com.au/2012/07/Django-resetting-passwords-with.html
既存の関数をラップして、必要なテンプレートを渡すだけです。例えば:
from Django.contrib.auth.views import password_reset
def my_password_reset(request, template_name='path/to/my/template'):
return password_reset(request, template_name)
これを確認するには、組み込みビューの関数宣言を見てください。
http://code.djangoproject.com/browser/Django/trunk/Django/contrib/auth/views.py#L74
次のことができます。
説明:
テンプレートがロードされると、settings.pyのINSTALLED_APPS変数でテンプレートが検索されます。順序はINSTALLED_APPSの定義のランクによって決定されるため、アプリは「Django.contrib.auth」より前に来るため、テンプレートが読み込まれました(参照: https://docs.djangoproject.com/en/dev/ref /templates/api/#Django.template.loaders.app_directories.Loader )。
アプローチの動機:
別の、おそらくより簡単な解決策は、設定テンプレートディレクトリをsettings.pyのTEMPLATES設定のDIRSエントリに追加することです。 (この設定はDjango 1.8で新しくなったと思います。以前のDjangoバージョンではTEMPLATE_DIRSと呼ばれていました。)
そのようです:
TEMPLATES = [
{
'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
# allow overriding templates from other installed apps
'DIRS': ['my_app/templates'],
'APP_DIRS': True,
}]
次に、my_app/templates
の下にオーバーライドテンプレートファイルを配置します。したがって、オーバーライドされたパスワードリセットテンプレートはmy_app/templates/registration/password_reset_form.html
になります
私は私の2つの行をURLと管理者からのテンプレートで使用していました
url(r'^change-password/$', 'Django.contrib.auth.views.password_change', {
'template_name': 'password_change_form.html'}, name="password-change"),
url(r'^change-password-done/$', 'Django.contrib.auth.views.password_change_done', {
'template_name': 'password_change_done.html'
}, name="password-change-done")
ドキュメント は、コンテキスト変数form
が1つだけであることを示しています。
ログインに問題がある場合(これは一般的です)、 documentation は3つのコンテキスト変数があると言います:
form
:ログインフォームを表すFormオブジェクト。 Formオブジェクトの詳細については、フォームのドキュメントを参照してください。next
:ログイン成功後にリダイレクトするURL。これにはクエリ文字列も含まれる場合があります。site_name
:SITE_ID設定に従った現在のサイトの名前。