Django 身份验证 urls.py 命名空间



我想管理一个带有命名空间的单独 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'
),

现在,我没有看到反向错误。

我希望我的问题/答案对其他人有所帮助。谢谢。

最新更新