我想管理一个带有命名空间的单独 urls.py。
conf/
urls.py (1)
common/
urls.py (2)
(1(是由Django安装的系统范围的 urls.py,我制作了(2(,它具有索引页面和"帐户"身份验证页面。
(1( urls.py 包含命名空间为"common"的 common.url
url(r'^', include('common.urls', namespace='common')),
(2( urls.py 声明如下:
url(r'^accounts/', include('django.contrib.auth.urls')),
url(r'^accounts/register/$', UserCreateView.as_view(), name='register'),
url(r'^accounts/register/done/$', UserCreateDoneTemplateView.as_view(), name='register_done'),
以下网址被 Django 正确反转。
{% url 'common:login' %}
{% url 'common:logout' %}
{% url 'common:password_change' %}
{% url 'common:register' %}
但是,"common:password_change_done"没有反转,我遇到了"NoReverseMatch"错误。
当然,url 声明放置在系统范围的 urls.py (1( 中。我只是想知道是否可以将其拆分为一个单独的应用程序 (2(。
谢谢。
我认为我的问题和答案很模糊,而且非常混乱,因为我的英语很差。
首先,我想让我的网址带有"/account"前缀,如下所示:
/accounts/register
/accounts/login
/accounts/logout
我想在命名空间中重用"django.contrib.auth.urls",例如"common"或"单独管理url的帐户">
但是,以下视图的成功 URL 是硬编码的。这意味着我们必须遵守他们的规则命名约定。
PasswordChangeView
PasswordResetView
PasswordResetConfirmView
例如,在"密码更改视图"的情况下,实现如下:
class PasswordChangeView(PasswordContextMixin, FormView):
form_class = PasswordChangeForm
success_url = reverse_lazy('password_change_done')
template_name = 'registration/password_change_form.html'
title = _('Password change')
... omitted ...
因此,我决定不包括'django.contrib.auth.urls',我自己声明了url模式。
我想定义"PasswordChangeView"的继承类,但我知道Django支持传递成员字段的视图类。
url(
r'^password_change/$',
PasswordChangeView.as_view(success_url=reverse_lazy('account:password_change_done')),
name='password_change'
),
现在,我没有看到反向错误。
我希望我的问题/答案对其他人有所帮助。谢谢。