【问题标题】:Django authentication urls.py with namespace带有命名空间的 Django 身份验证 urls.py
【发布时间】:2017-11-17 01:17:09
【问题描述】:

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

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

(1) 是系统范围的 urls.py,由 Django 安装,我制作了 (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'),

以下 url 被 Django 正确反转。

{% url 'common:login' %}
{% url 'common:logout' %}
{% url 'common:password_change' %}
{% url 'common:register' %}

但是,“common:password_change_done”没有反转,我遇到了“NoReverseMatch”错误。

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

谢谢。

【问题讨论】:

  • 你能显示完整的错误和回溯吗?
  • Django 身份验证 URL 已经在命名空间 auth 中。试试{% url 'auth:login' %}{% url 'common:auth:login' %}
  • @Alasdair 对于这么晚的反馈,我深表歉意。我没有包含 auth.urls,但我知道以下视图需要使用正确的命名空间设置“success_url”。 PasswordChangeView.as_view(success_url=reverse_lazy('common:password_change_done'))、PasswordResetView.as_view(success_url=reverse_lazy('common:password_reset_done'))、PasswordResetConfirmView.as_view(success_url=reverse_lazy('common:password_reset_complete'))、跨度>
  • 对不起,我不明白你的评论。如果您已经解决了您的问题,您可以将其添加为答案。如果您仍然卡住,请编辑您的原始问题。
  • @Alasdair,我很抱歉我的英语不好,希望我下面的帖子能帮助你理解。谢谢。

标签: django django-registration


【解决方案1】:

由于我的英语很差,我认为我的问题和答案含糊不清。

首先,我想让我的网址带有“/account”前缀,如下所示:

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

我想将“django.contrib.auth.urls”与“common”或“account to manage urls”等命名空间重复使用

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

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”,我自己声明了 url 模式。

我想定义“PasswordChangeView”的继承类,但我知道Django支持视图类的pass成员字段。

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

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

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

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2021-03-22
    • 2014-05-05
    • 1970-01-01
    • 2012-04-24
    • 2020-10-20
    相关资源
    最近更新 更多