【问题标题】:django urlconf direct from root to included app logicdjango urlconf 直接从根目录到包含的应用程序逻辑
【发布时间】:2017-12-14 17:10:57
【问题描述】:

我一直在尝试解决这个问题一段时间,但一直未能找到有效的解决方案。也许有人可以帮助指出更好的方法!

我正在使用我的根 urlconf 将两个请求重定向到包含的应用程序:

url("^about/news/", include("kdi.urls")),
url("^about/recognition/", include("kdi.urls")),

这里是kdi 应用的urlconf:

url(r"^$", "kdi.views.news", name="news"),

# this is the pattern that needs to change:
url(r"^$", "kdi.views.recog", name="recog"),

在应用程序的 urlconf 中使用从根 ^about/news/^about/recognition^$ 的更精细的重定向似乎更聪明。这仅适用于一种模式,但我想将其扩展为适用于两种模式。

^about/ 从根目录引导到我可以在kdi 应用程序中检查^/news$^/recognition$ 的应用程序会更智能吗?如果没有匹配,那是否也可以使用根的包罗万象的^?是否可以从 urlconf 检查request.path,然后使用 if 语句指向正确的视图?或者也许在根目录中使用 name 字段,然后通过应用程序的 url 模式中的该名称访问?

只是在逻辑上有点麻烦!

编辑:

从根 urlconf 中删除了 namespace 字段以限制混淆

【问题讨论】:

  • 你有两个include和相同的namespace,我认为它们应该是不同的。
  • 我可以从子应用通过命名空间访问模式吗?这很容易解决。我正在寻找更智能的模式。
  • 访问模式需要使用django.core.urlresolvers.reverse
  • 谢谢,我看反了。这带来了另一个问题:我可以在根目录中命名一个包含模式url("^about/news/", include("kdi.urls")), 吗?这样做的问题是我不需要通过模板访问 url,只需调用子应用程序中的特定视图。视图处理大​​部分逻辑。
  • reverse 可以使用命名空间吗?

标签: python django routes django-urls urlconf


【解决方案1】:

你在这里做了一件非常奇怪的事情,我不知道为什么。

您应该只包含一次您的应用网址。但是该包含文件中的每个 URL 都需要 不同 - 否则 Django 不可能知道如何路由请求。

所以,主要的 urls.py 应该只是:

url("^about/", include("kdi.urls")),

应用程序应该是:

url(r"^news/$", "kdi.views.news", name="news"),
url(r"^recognition/$", "kdi.views.recog", name="recog")

【讨论】:

  • 谢谢!!我只是在您回答之前就想通了,这是正确的答案。我担心请求会卡在子应用程序中,而不是返回到根 url 中的包罗万象的模式。但确实如此!
猜你喜欢
  • 2021-09-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 2018-03-02
  • 2013-03-19
  • 1970-01-01
相关资源
最近更新 更多