【发布时间】: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