Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django auth:在哪里放置自定义模板?_Django_Django Admin_Django Authentication - Fatal编程技术网

Django auth:在哪里放置自定义模板?

Django auth:在哪里放置自定义模板?,django,django-admin,django-authentication,Django,Django Admin,Django Authentication,我想用Django(1.9)设置用户身份验证。如文档中所述,我在项目的urls.py中包含了auth视图 urlpatterns = [ ..., url('^accounts/', include('django.contrib.auth.urls')), ..., ] 如前所述,需要为Auth视图编写自定义模板。我将这些模板放在目录myproject/templates/registration/中。现在的问题是,这些模板遵循预定义的命名约定,因此与身份验证视图的管

我想用Django(1.9)设置用户身份验证。如文档中所述,我在项目的
urls.py
中包含了auth视图

urlpatterns = [
    ...,
    url('^accounts/', include('django.contrib.auth.urls')),
    ...,
]

如前所述,需要为Auth视图编写自定义模板。我将这些模板放在目录
myproject/templates/registration/
中。现在的问题是,这些模板遵循预定义的命名约定,因此与身份验证视图的管理模板冲突。例如,如果我在管理员中输入链接更改密码,管理员视图将使用我的自定义模板呈现。如何命名自定义模板的名称空间,以便它们不会干扰管理

您应该覆盖内置函数的模板名称:

urlpatterns = [
    url(
        '^change-password/',
        auth_views.password_change,
        {'template_name': 'myproject/registration/change-password.html'}
    )
]
如文档所述,您必须使用URL.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']
^login/$[name='login']
^注销/$[name='logout']
^密码更改/$[name='password\u change']
^密码\u更改/done/$[name='password\u更改\u完成']
^密码\u重置/$[name='password\u重置']
^密码\u重置/done/$[name='password\u重置\u完成']
^重置/(?P[0-9A-Za-z \-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$[name='password\u reset\u confirm']
^重置/完成/$[name='password\u reset\u complete']

正如Aleksander Gordienko指出的,手动包含每个身份验证视图并更改模板名称似乎是最好的解决方案。为了节省对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.contrib.auth导入视图作为auth\u视图
URL模式=[
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\u change/$”,auth\u views.password\u change,
{'template_name':'myapp/registration/password_change_form.html',
“post_change_redirect”:“/accounts/password_change/done/”,
name='password\u change'),
url(r“^accounts/password\u change/done/$”,auth\u views.password\u change\u done,
{'template_name':'myapp/registration/password_change_done.html'},
name='password\u change\u done'),
url(r“^accounts/password\u reset/$”,auth\u views.password\u reset,
{'template_name':'myapp/registration/password_reset_form.html'},
name='password_reset'),
url(r“^accounts/password\u reset/done/$”,auth\u views.password\u reset\u done,
{'template_name':'myapp/registration/password_reset_done.html'},
name='password\u reset\u done'),
url(r'^accounts/reset/(?P[0-9A-Za-z_ \-])/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$,
验证视图。密码重置确认,
{'template_name':'myapp/registration/password_reset_confirm.html'},
name='password\u reset\u confirm'),
url(r“^accounts/reset/done/$”,验证视图。密码重置完成,
{'template_name':'myapp/registration/password_reset_complete.html'},
name='password\u reset\u complete',
...,
]

好的,我想到了这个解决方案,但是没有办法使用通用的方法来包含URL和分离模板吗?A没有找到其他解决方案:(