django_registration网址和路由混淆

时间:2016-05-19 23:38:29

标签: django django-urls django-registration

我是Django的新手,所以我正在学习它是如何工作的,我有一个相当不错的网络应用站起来,我正在玩django_registration插件。令我困惑的是模板存在于根网站/注册中,我可以从这样的URL访问它们:

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

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

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

混淆了什么是有效的,而不是另一个(我有点来自铁路背景,我可以看到那里的路线)这个我无法学习,这是在经历了为什么有些网址我的应用程序使用了一个mysite:使用半冒号进行民意调查(我认为我得到) 只是混淆那些不在应用程序名称空间下的人。可以这么说。

或者registration_login应该工作,我真的只是在模板设置或urls.py上做错了什么?只是想获得一些背景知识。

2 个答案:

答案 0 :(得分:1)

编辑:只是看到了问题所在的login网址。我将离开另一部分关于registration_register以备将来参考,以防它恰好有用。

登录的网址位于here,名为auth_login

registration_register位:

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

检查位于here的网址的来源,您会看到以下代码段

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

答案 1 :(得分:1)

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

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

因此,在上面的示例中,您需要查看该应用的URL文件(或文档),以查看他们为使用{%url%}的路由命名的名称。如果没有给出名字,你只需要使用实际的网址“/ login /”(或其他任何内容),就像在任何其他锚标签中一样。

我不确定您使用的是哪个django_registration应用程序,但Django附带了一个:django.contrib.auth,您可以使用它。对于它的url文件,您会发现登录URL路由名为“login”,因此您可以使用{%url“login”%}。

有关详细信息,请查看相关文档:https://docs.djangoproject.com/en/1.9/topics/auth/default/

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

{%url%}模板标记很适合使用,因为如果您的网址更改,则无需在整个网站中更改链接。但是,就像我上面提到的,您可以像在标准HTML锚点href中一样直接引用URL。您不必使用{%url%}

有关详细信息,请查看:https://docs.djangoproject.com/en/1.9/topics/http/urls/