【问题标题】:How to change root URL configuration in order to use a namespace for the user URLs如何更改根 URL 配置以便为用户 URL 使用命名空间
【发布时间】:2018-11-07 15:26:18
【问题描述】:

全站网址:

from user import urls as user_urls
app_name='user'

urlpatterns = [
    re_path(r'^user/',include(user_urls)),    
]

由于 admin 应用,还在django/contrib/admin/sites.py 中定义了名为loginlogout 的URL 模式。我需要 Django 指向 user 应用程序。

它仍然指向registration/login.html(即管理应用程序)。我尝试了命名空间,但它在 Django 2.0 中被删除了。

用户/urls.py:

urlpatterns = [
    path(r'',RedirectView.as_view()),

    re_path(
        r'^login/$',auth_views.LoginView.as_view(template_name='user/login.html'), 
        name='login'
    ),

    re_path(
        r'^logout/$',auth_views.LogoutView.as_view(template_name='user/logged_out.html') 
, 
        {
            'extra_context':{'form':AuthenticationForm }
        }, name='logout'
    ),
]

【问题讨论】:

    标签: django django-authentication


    【解决方案1】:

    为了在 django 2 中通过命名空间访问 URL,您需要移动 app_name 属性,以便 user/urls.py 变为;

    app_name = 'user'
    urlpatterns = [
        path(r'', RedirectView.as_view()),
    
        re_path(
            r'^login/$',auth_views.LoginView.as_view(), 
            {'template_name':'user/login.html'},
            name='login'
        ),
    
        re_path(
            r'^logout/$',auth_views.LogoutView.as_view(), 
            {
                'template_name':'user/logged_out.html',
                'extra_context':{'form':AuthenticationForm }
            },
            name='logout'
        ),
    ]
    

    users.urls 中定义的 URL 将具有 user 的应用程序命名空间。

    或者,您可以通过这样做在同一文件中命名 URL;

    user_patterns = ([
        path(r'', RedirectView.as_view()),
    
        re_path(
            r'^login/$',auth_views.LoginView.as_view(), 
            {'template_name':'user/login.html'},
            name='login'
        ),
    
        re_path(
            r'^logout/$',auth_views.LogoutView.as_view(), 
            {
                'template_name':'user/logged_out.html',
                'extra_context':{'form':AuthenticationForm }
            },
            name='logout'
        ),
    ], 'user')
    
    urlpatterns = [
        re_path(r'^user/', include(user_patterns)),    
    ]
    

    可以在此处找到有关此的文档; https://docs.djangoproject.com/en/2.0/topics/http/urls/#url-namespaces-and-included-urlconfs

    【讨论】:

      猜你喜欢
      • 2010-12-27
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 2020-06-02
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多