【问题标题】:Reverse for 'home' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s)未找到带有参数“()”和关键字参数“{}”的“home”的反向操作。 0 个图案
【发布时间】:2017-05-08 02:04:49
【问题描述】:

简要说明我正在尝试通过单击“rates.html”网页上的徽标(存在于费率应用程序中),我尝试实现此目的的方式如下。

我在这里查看了其他类似的问题,他们似乎都忘记在代码的 appname\urls.py 部分指定命名空间部分。我觉得我已经正确地将 app_name = '[namespace]' 指定到 urls.py 中。

它显示的特定于我的问题的确切错误是:

找不到带有参数“()”和关键字参数“{}”的“home”。尝试了 0 个模式:[]

错误突出显示“rate.html”上的一行 html 代码:

<div id="logoholder">
    <a href="**{% url 'getrate:home' %}**"><img src="{%static 
    'home/images/transparentWatermark.png' %}" width="40" height="40" 
    style="margin:5px 10px"></a>
</div>

getrate\urls.py:

from django.conf.urls import url, include
from . import views

app_name = 'getrate'

urlpatterns = [
    url(r'^$', views.ViewRate, name='rate'),
    url(r'^home/', include('home.urls', namespace='home')),
]

主页\urls.py

from django.conf.urls import url, include
from . import views

app_name = 'home'

urlpatterns = [

    url(r'^$', views.ViewHome, name='home'),
]

我的网站\urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^home/', include('home.urls', namespace='home')),
    url(r'^getrate/', include('getrate.urls', namespace='getrate')),
]

我对此的理解一定是错误的,rate.html 有一个公司徽标,我可以点击它通过 {% url 'getrate:home' %} 触发 getrate\urls.py。 getrate\urls.py 代码中包含 home\urls.py。这部分被触发,因为它在该代码行上有命名空间主页。现在它查看 home\urls.py 并最终结束它的正则表达式匹配。让我知道我错了。

感谢您的宝贵时间。

【问题讨论】:

    标签: python django django-urls


    【解决方案1】:

    您收到该错误是因为这样的网址不存在!

    首先,您将namespaces 和app_names 混在一起给自己造成了不必要的混乱,请注意

    对 app_name 参数的支持已弃用,并将在 姜戈 2.0。按照 URL 命名空间中的说明指定 app_name 和 而是包含 URLconfs

    参考:https://docs.djangoproject.com/en/1.11/ref/urls/

    其次,我真的不明白为什么您需要拥有三个单独的 urls.py 文件(除非这是您为重新分发而构建的应用程序)。一个主 urls.py 就足够了,因为你总共只有三个 url。

    如果您想坚持这一点,请删除 app_name 并仅使用命名空间参数,然后重试。

    【讨论】:

    • "您收到该错误是因为这样的 url 不存在!" - 我理解它的方式是它正在获取 /home/ url。
    • 显然不是。否则你会怎么得到这个错误?
    • 正如我在回答中提到的,您的命名空间和 app_name 指令存在冲突。省略 app_names
    • 我在上面的评论上写了整段......我不知何故未能提交!我使用 3 个 URL,因为我认为每个应用都有一个 URL 是最佳做法。
    • 我从 home\urls.py 和 getrate\urls.py 中删除了 app_name 部分。现在 rate.html 页面加载并没有给我上面的错误。但是,当我单击徽标时,它无法将我带到主页。错误信息现在是:使用 WinsWayTransport.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,顺序如下: ^admin/ ^home/ ^getrate/ ^$ [name='rate'] 当前 URL,getrate/{ % url 'home' %},与这些都不匹配。
    【解决方案2】:

    虽然答案解决了直接问题,但它没有实现我试图执行的功能(重定向到另一个应用程序上的 html 页面)。我没有正确理解的是 url 工作流程。我认为无论您使用哪个应用程序,它都会首先查看该应用程序的 urls.py 代码,而不是主网站的 urls.py 代码。

    实际工作流程来自 mysite/urls.py -->(如果导入和使用包含库)--> app1/urls.py --> app2/urls.py --> app#/urls.py .所以总是从主要的 urls.py 开始

    由于对这个概念的误解,我的错误是试图将每个应用程序中的每个 urls.py 代码相互链接,从而导致各种错误、无限循环等。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2016-08-27
      • 2012-07-08
      • 1970-01-01
      • 2015-02-18
      • 2010-12-22
      • 2013-12-07
      • 2016-11-21
      相关资源
      最近更新 更多