【问题标题】:Django reverse URL breaks in productionDjango 反向 URL 在生产中中断
【发布时间】:2012-10-23 13:05:57
【问题描述】:

我遇到了Reverse for 'home' with arguments '()' and keyword arguments '{}' not found. 这发生在一个不带参数的视图上,并且在模板中命名为带引号和不带引号。它只发生在我的生产服务器上,而不是我的开发环境。两者都运行 Django 1.4。

我在顶级urls.py 中有以下无参数视图条目。

url(r'^course_catalog/', include('course_catalog.urls')),

在course_catalog/urls.py:

urlpatterns = patterns('course_catalog.views',
    url(r'^$', 'index', name="home"),
    ...

我在几个模板中也有以下内容

<a href="{% url home %}">

我也在manage.py shell 中试过这个:

>>> from django.core.urlresolvers import reverse
>>> reverse('home')
'/course_catalog/'

所以它似乎只在提供模板时才会发生。 顺便说一下,如果我导航到 URL,视图本身就可以工作。

我真的不知道从哪里看这一点。

知道是什么原因导致这种情况发生吗?谢谢!

【问题讨论】:

  • WSGI 部署不会影响这个吗? (不同于 shell 的 Python 路径,脚本别名路径,...)
  • 我认为我已经正确设置了一些东西,因为如果我注释掉 URL 查找,网站就会加载。但我对 WSGI 和相关技术的经验很少,所以很有可能我错了!什么样的设置会给他们不同的路径?
  • 我认为当你运行 manage.py shell 时,你的当前目录是项目目录,这意味着 Python 会找到在你的 WSGI Python 路径设置中可能无法发现的模块。这可能与您所经历的有关,也可能无关。我要尝试的另一件事是通过django.template.loader.render_to_string 在您的python shell 中实际呈现模板。
  • 嗯。以这种方式渲染模板效果很好。所以这暗示了我猜的路径问题?
  • 嗯,这是我现在唯一能想到的 :-) 您可以尝试在 WSGI 文件的开头添加 import sys; sys.path.append('/path/to/project/dir')。

标签: django url django-templates django-views production-environment


【解决方案1】:

使用参数 '()' 反转 ''home''

您似乎在没有{% load url from future %} 的模板中执行{% url 'home' %}。这可以解释为什么 django 双单引号''home''。就像你在做reverse("'home'")。

【讨论】:

  • 糟糕,我编辑了我的问题以反映模板行中的更改,但忘记更新错误。它显示了我现在得到的实际错误。
  • 我最初有这个并使用引号,但我放弃了它并回到直接 1.4 以简化事情并找到错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2015-01-07
  • 2019-01-12
  • 2013-01-14
  • 2012-12-17
  • 1970-01-01
相关资源
最近更新 更多