たとえば、コンテキスト内のテンプレートファイル名でポイントを指定でき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'
キーワード引数と一致するURLに対して呼び出されますtemplate_name = 'my_templates/password_reset.html'
。
password_reset
それ以外の場合は、ビューがそれ自体を処理するため、コンテキストを提供する必要はありません。使用可能なコンテキストを確認したい場合は、TemplateSyntax
エラーをトリガーし、スタックトレースを調べて、という名前のローカル変数を持つフレームを見つけることができますcontext
。コンテキストを変更したい場合は、コンテキストプロセッサについて上記で述べたことはおそらく進むべき道です。
要約すると、独自のテンプレートを使用するには何をする必要がありますか?ビューtemplate_name
が呼び出されたときに、ビューにキーワード引数を指定します。URLパターンタプルの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
私はURLと管理者からのテンプレートでこの2行を使用していて、必要に応じて変更していました
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")