django_registration url 和路由混淆
Posted
技术标签:
【中文标题】django_registration url 和路由混淆【英文标题】:django_registration urls and routing confusion 【发布时间】:2016-09-17 01:44:32 【问题描述】:我是 Django 新手,所以我正在学习它是如何工作的,我得到了一个相当不错的网络应用程序,并且我正在使用 django_registration 插件。让我感到困惑的是模板存在于根站点 /registration 中,我可以从这样的 URL 访问它们:
<a href="% url 'registration_register' %">
所以我认为我可以对注册中的所有内容都这样做,但事实并非如此,因为这不起作用:
<a href="% url 'registration_login' %">
混淆了它是关于一个有效的,而不是另一个(我有点来自rails背景,我可以看到那里的路线)这个我学习有困难,这是在经历了为什么一些网址之后我的应用程序使用带有分号的 mysite:polls 等(我想我明白了) 只是对那些不在应用命名空间下的应用感到困惑。
或者registration_login 是否有效,而我真的只是在模板设置或urls.py 上做错了什么?只是想了解一些背景。
【问题讨论】:
【参考方案1】:编辑:刚刚看到是 login
网址给您带来了问题。我会留下关于registration_register的其他部分以备将来参考,以防它碰巧有用。
登录网址位于here,名为auth_login
registration_register
位:
您是否在 settings.py 文件中将 INCLUDE_REGISTER_URL
设置为 False?
检查位于here 的网址的来源,您将看到以下sn-p
if getattr(settings, 'INCLUDE_REGISTER_URL', True): #Defaults to True
urlpatterns += [
url(r'^register/$',
RegistrationView.as_view(),
name='registration_register'),
]
【讨论】:
【参考方案2】:在 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 % 模板标签非常适合使用,因为如果您的网址发生更改,您不必更改整个网站的链接。但是,就像我上面提到的那样,您始终可以像在标准 HTML 锚点 href 中一样直接引用 url。您不必使用 % url %
有关更多信息,请查看:https://docs.djangoproject.com/en/1.9/topics/http/urls/
【讨论】:
以上是关于django_registration url 和路由混淆的主要内容,如果未能解决你的问题,请参考以下文章
nodeJS---URL相关模块用法(url和querystring)