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



全网站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指向用户应用程序。

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

user/uls.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-命名空间和包含的urlcofs

最新更新