たとえば、コンテキストでテンプレートファイル名url '^/accounts/password/reset/$'
を使用django.contrib.auth.views.password_reset
してをポイントできますが、コンテキストの詳細を送信する必要があると思います。
パスワードのリセットおよび変更の各ビューに追加するコンテキストを正確に知る必要があります。
たとえば、コンテキストでテンプレートファイル名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番目のメンバーとしてディクショナリを含めることで、ビューにキーワード引数を提供できます。
registration/password_reset_email.html
:のようなHTML要素が含まれている実際に<div>
、<a>
これはテキストのみ送信するため
この記事を強くお勧めします。
差し込んだだけでうまくいった
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
ドキュメントは、そこに一つだけのコンテキスト変数と述べていますform
。
ログインに問題がある場合(これは一般的です)、ドキュメントには3つのコンテキスト変数があると記載されています。
form
:ログインフォームを表すFormオブジェクト。Formオブジェクトの詳細については、フォームのドキュメントを参照してください。next
:ログイン成功後にリダイレクトするURL。これにはクエリ文字列も含まれる場合があります。site_name
:SITE_ID設定に基づく、現在のサイトの名前。password_reset
ビューの引数であるときに「コンテキスト」について話しているので、質問は混乱していると思います。
私は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")
context
と、あなたが探しているのは正しいとは思えません!