Django auth:自定义模板放在哪里?
Django auth: Where to put custom templates?
我想使用 Django (1.9) 设置用户身份验证。如文档中所述,我在项目的 urls.py
like
中包含了 auth 视图
urlpatterns = [
...,
url('^accounts/', include('django.contrib.auth.urls')),
...,
]
如 documentation 所述,需要为 Auth 视图编写自定义模板。我将这些模板放在目录 myproject/templates/registration/
中。现在的问题是这些模板,因为它们遵循预定义的命名约定,与 Auth 视图的管理模板冲突。例如。如果我在管理员中输入 link CHANGE PASSWORD,管理员视图将使用我的自定义模板呈现。我如何命名我的自定义模板,以便它们不会干扰管理员?
您应该覆盖内置函数的模板名称:
urlpatterns = [
url(
'^change-password/',
auth_views.password_change,
{'template_name': 'myproject/registration/change-password.html'}
)
]
如文档所述,您必须使用 urls.py 中的下一个模板:
^login/$ [name='login']
^logout/$ [name='logout']
^password_change/$ [name='password_change']
^password_change/done/$ [name='password_change_done']
^password_reset/$ [name='password_reset']
^password_reset/done/$ [name='password_reset_done']
^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ [name='password_reset_confirm']
^reset/done/$ [name='password_reset_complete']
正如 Aleksander Gordienko 所指出的,手动包含每个 auth 视图并更改模板名称似乎是最好的解决方案。为了节省一些输入和手动提取 auth 视图名称的时间,这里是 url 模式,其中模板以其原始名称存储在目录 project/myapp/templates/myapp/registration/
.
中
from django.contrib.auth import views as auth_views
urlpatterns = [
url(r'^accounts/login/$', auth_views.login,
{'template_name': 'myapp/registration/login.html'}, name='login'),
url(r'^accounts/logout/$', auth_views.logout,
{'template_name': 'myapp/registration/logout.html'}, name='logout'),
url(r'^accounts/password_change/$', auth_views.password_change,
{'template_name': 'myapp/registration/password_change_form.html',
'post_change_redirect': '/accounts/password_change/done/'},
name='password_change'),
url(r'^accounts/password_change/done/$', auth_views.password_change_done,
{'template_name': 'myapp/registration/password_change_done.html'},
name='password_change_done'),
url(r'^accounts/password_reset/$', auth_views.password_reset,
{'template_name': 'myapp/registration/password_reset_form.html'},
name='password_reset'),
url(r'^accounts/password_reset/done/$', auth_views.password_reset_done,
{'template_name': 'myapp/registration/password_reset_done.html'},
name='password_reset_done'),
url(r'^accounts/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
auth_views.password_reset_confirm,
{'template_name': 'myapp/registration/password_reset_confirm.html'},
name='password_reset_confirm'),
url(r'^accounts/reset/done/$', auth_views.password_reset_complete,
{'template_name': 'myapp/registration/password_reset_complete.html'},
name='password_reset_complete'),
...,
]
我想使用 Django (1.9) 设置用户身份验证。如文档中所述,我在项目的 urls.py
like
urlpatterns = [
...,
url('^accounts/', include('django.contrib.auth.urls')),
...,
]
如 documentation 所述,需要为 Auth 视图编写自定义模板。我将这些模板放在目录 myproject/templates/registration/
中。现在的问题是这些模板,因为它们遵循预定义的命名约定,与 Auth 视图的管理模板冲突。例如。如果我在管理员中输入 link CHANGE PASSWORD,管理员视图将使用我的自定义模板呈现。我如何命名我的自定义模板,以便它们不会干扰管理员?
您应该覆盖内置函数的模板名称:
urlpatterns = [
url(
'^change-password/',
auth_views.password_change,
{'template_name': 'myproject/registration/change-password.html'}
)
]
如文档所述,您必须使用 urls.py 中的下一个模板:
^login/$ [name='login']
^logout/$ [name='logout']
^password_change/$ [name='password_change']
^password_change/done/$ [name='password_change_done']
^password_reset/$ [name='password_reset']
^password_reset/done/$ [name='password_reset_done']
^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ [name='password_reset_confirm']
^reset/done/$ [name='password_reset_complete']
正如 Aleksander Gordienko 所指出的,手动包含每个 auth 视图并更改模板名称似乎是最好的解决方案。为了节省一些输入和手动提取 auth 视图名称的时间,这里是 url 模式,其中模板以其原始名称存储在目录 project/myapp/templates/myapp/registration/
.
from django.contrib.auth import views as auth_views
urlpatterns = [
url(r'^accounts/login/$', auth_views.login,
{'template_name': 'myapp/registration/login.html'}, name='login'),
url(r'^accounts/logout/$', auth_views.logout,
{'template_name': 'myapp/registration/logout.html'}, name='logout'),
url(r'^accounts/password_change/$', auth_views.password_change,
{'template_name': 'myapp/registration/password_change_form.html',
'post_change_redirect': '/accounts/password_change/done/'},
name='password_change'),
url(r'^accounts/password_change/done/$', auth_views.password_change_done,
{'template_name': 'myapp/registration/password_change_done.html'},
name='password_change_done'),
url(r'^accounts/password_reset/$', auth_views.password_reset,
{'template_name': 'myapp/registration/password_reset_form.html'},
name='password_reset'),
url(r'^accounts/password_reset/done/$', auth_views.password_reset_done,
{'template_name': 'myapp/registration/password_reset_done.html'},
name='password_reset_done'),
url(r'^accounts/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
auth_views.password_reset_confirm,
{'template_name': 'myapp/registration/password_reset_confirm.html'},
name='password_reset_confirm'),
url(r'^accounts/reset/done/$', auth_views.password_reset_complete,
{'template_name': 'myapp/registration/password_reset_complete.html'},
name='password_reset_complete'),
...,
]