django_registration 网址和路由混淆

django_registration urls and routing confusion

我是 Django 的新手,所以我正在学习它是如何工作的,我得到了一个相当不错的 Web 应用程序,我正在使用 django_registration 插件。让我感到困惑的是模板位于根站点 /registration 中,我可以从这样的 URL 访问它们:

<a href="{% url 'registration_register' %}">

所以我认为我可以为注册中的所有内容执行此操作,但事实并非如此,因为这不起作用:

<a href="{% url 'registration_login' %}">

混淆了一个有效的是什么,另一个无效(我有点来自 rails 背景,我可以看到那里的路线)这个我在学习时遇到了困难,这是在之后了解为什么我的应用程序中的某些网址使用 mysite:polls 等和分号(我想我明白了) 可以这么说,只是对那些不在应用程序命名空间下的那些感到困惑。

或者 registration_login 应该有效,我真的只是在模板设置或 urls.py 或其他方面做错了什么?只是想了解一些背景知识。

编辑:刚看到 login url 给您带来了问题。我将把关于 registration_register 的其他部分留作将来参考,以防它碰巧有用。

用于登录的 url 位于 here 并命名为 auth_login

registration_register位:

您是否在 settings.py 文件中将 INCLUDE_REGISTER_URL 设置为 False?

检查位于 here 的 url 的来源,您将看到以下片段

if getattr(settings, 'INCLUDE_REGISTER_URL', True): #Defaults to True
    urlpatterns += [
        url(r'^register/$',
            RegistrationView.as_view(),
            name='registration_register'),
    ]

在 Django 中,当您使用类似 {% url 'registration_login' %} 的内容时,您指的是给定应用的 urls 文件中的路由。如果 url 路由有 name=registration_login,这工作正常。

所以,您提到这是您访问模板的方式,但它实际上只是您在 URL 中指定路由的方式,而不是模板。该路由然后指定要加载的视图,然后设置将使用的模板 HTMl 文件。

因此,在上面的示例中,您需要查看该应用程序的 URL 文件(或文档)以了解他们为使用的路由指定的名称 {% url % }.如果没有给出名称,您只需要使用实际的 url“/login/”(或任何名称),就像在任何其他锚标记中一样。

我不确定您使用的是哪个 django_registration 应用程序,但 Django 有一个附带的应用程序:django.contrib.auth 您可以使用。 urls 文件,你会发现登录 URLs 路由被命名为 "login",所以你可以使用 {% url "login" % }.

查看文档了解更多信息:https://docs.djangoproject.com/en/1.9/topics/auth/default/

哦,关于你在某些情况下引用的名称空间的问题,(即 mysite:polls):这是在 urls 文件中用 app_name 设置的内容。因此,如果投票应用程序在 urls.py 中有 app_name=polls,那么您可以说 {% url 'polls:vote' %}。如果您使用许多应用程序,使用它会很好,在完整的 Django 站点中几乎总是如此。

{% url %} 模板标签很好用,因为如果您的 url 发生变化,您不必更改整个网站的链接。但是,正如我上面提到的,您始终可以像在标准 HTML 锚点 href 中一样直接引用 url。您不必使用 {% url %}

有关这方面的更多信息,请查看:https://docs.djangoproject.com/en/1.9/topics/http/urls/