【问题标题】:Django auth: Where to put custom templates?Django auth:在哪里放置自定义模板?
【发布时间】:2016-09-23 04:14:48
【问题描述】:

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

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

正如documentation 所述,需要为Auth 视图编写自定义模板。我将这些模板放在目录myproject/templates/registration/ 中。现在的问题是这些模板,因为它们遵循预定义的命名约定,与 Auth 视图的管理模板发生冲突。例如。如果我按照管理员中的链接更改密码,管理员视图将使用我的自定义模板呈现。如何命名我的自定义模板,以便它们不会干扰管理员?

【问题讨论】:

    标签: django django-admin django-authentication


    【解决方案1】:

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

    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']
    

    【讨论】:

    • 好的,我想到了这个解决方案,但是有没有办法使用通用的方式来包含 url 和分隔模板?
    • A 没有找到其他解决方案 :(
    【解决方案2】:

    正如 Aleksander Gordienko 指出的那样,手动包括每个身份验证视图并更改模板名称似乎是最好的解决方案。为了节省您输入和手动提取身份验证视图名称的时间,以下是 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'),
        ...,
    ]
    

    【讨论】:

      猜你喜欢
      • 2016-12-01
      • 2018-02-09
      • 1970-01-01
      • 2014-04-28
      • 2016-10-07
      • 2015-10-23
      • 2012-04-20
      • 2015-07-25
      • 1970-01-01
      相关资源
      最近更新 更多