如何更改 root URL 配置以便为用户 URLs 使用命名空间

How to change root URL configuration in order to use a namespace for the user URLs

站点范围URL:

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 app.

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

user/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 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