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

时间:2017-06-14 18:42:25

标签: django django-registration

我想用命名空间管理一个单独的urls.py。

conf/
    urls.py (1)
common/
    urls.py (2)

(1)是由Django安装的系统级urls.py,我创建了(2)其中包含索引页和" accounts"认证页面。

(1)urls.py包含带命名空间的common.url" common"

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' %}

然而,"常见:password_change_done"没有逆转,我遇到了#34; NoReverseMatch"错误。

当然,url声明放在系统范围的urls.py(1)中。我只是想知道是否可以将其拆分为单独的应用程序(2)。

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为由于英语不好,我的问题和答案含糊不清,令人困惑。

首先,我想用" / account"像这样的前缀:

/accounts/register
/accounts/login
/accounts/logout

我想重用' django.contrib.auth.urls'使用名称空间如' common'或者'帐户单独管理网址'

但是,以下视图的成功网址是硬编码的。这意味着我们必须遵循他们的规则命名约定。

PasswordChangeView
PasswordResetView
PasswordResetConfirmView

例如,在" PasswordChangeView"实施如下:

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',我自己宣布了网址模式。

我想定义继承类" PasswordChangeView",但我知道Django支持传递成员视野类。

url(
    r'^password_change/$',
    PasswordChangeView.as_view(success_url=reverse_lazy('account:password_change_done')),
    name='password_change'
),

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

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