예를 들어 컨텍스트에서 내 템플릿 파일 이름으로 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 패턴 튜플의 세 번째 멤버로 사전을 포함하여 뷰에 키워드 인수를 제공 할 수 있습니다.
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
.
로그인에 문제가있는 경우 (일반적인) 문서 에는 세 가지 컨텍스트 변수가 있다고 나와 있습니다.
form
: 로그인 양식을 나타내는 Form 객체입니다. Form 객체에 대한 자세한 내용은 양식 설명서를 참조하십시오.next
: 로그인 성공 후 리디렉션 할 URL입니다. 여기에는 쿼리 문자열도 포함될 수 있습니다.site_name
: SITE_ID 설정에 따른 현재 사이트의 이름입니다.password_reset
견해 의 주장 일 때 '맥락'에 대해 이야기한다는 점에서이 질문이 혼란 스럽습니다 .
나는 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")
context
귀하가 찾고있는 것이 옳지 않다고 생각 합니다!