渲染时捕获异常:
使用参数'()'和关键字参数'{}'找不到'products.views.'filter_by_led'的反转 .
我能够从shell成功导入 products.views.filter_by_led
并且它有效,所以路径应该是正确的 .
这是urls.py:
(r'^led-tv/$', filter_by_led ),
这是生成错误的地方:
href="{% url products.views.filter_by_led %}">
我无法理解,因为这可以从同一个文件中正常工作:
{% url products.views.lcd_screen_size screen_size=50 %}
这是函数定义:
def filter_by_led(request):
我不明白为什么Django会认为该函数无法找到该函数的Reverse .
我删除了所有 *.pyc
文件并重新启动了Apache .
我究竟做错了什么?
7 回答
我能想到的有三件事情:
刚刚使用了named urls,无论如何它更加强大和可维护
尝试在命令行使用
django.core.urlresolvers.reverse
以获得(可能)更好的错误Shell调用反向(如上所述)非常适合调试这些问题,但有两个关键条件:
你 must 提供与视图需要的任何参数匹配的参数,
这些 arguments 必须与正则表达式匹配 .
是的,它也是令人困惑的,因为反向只会抛出异常并且不会给你任何进一步的提示 .
URL模式的示例:
然后在shell中发生了什么:
它不起作用,因为我没有提供任何参数 .
现在它奏效了,但......
现在它不起作用,因为url_id与regexp(预期的数字,提供的字符串)不匹配 .
您可以对位置参数和关键字参数使用reverse . 语法是:
关于url模板标签,有趣的是它 . Django documentation给出了使用引用视图名称的示例:
所以我在HTML模板中以类似的方式使用它:
但这对我不起作用 . 但是异常消息给了我一些可能出错的提示 - 请注意视图名称周围的双引号:
当我引用时,它开始起作用:
而这个令人困惑 .
您需要围绕视图名称使用单引号
代替
我有一个类似的问题,解决方案正确使用'$'(字符串结尾)字符:
我的主url.py看起来像这样(注意$字符):
我的card_purchases应用程序的url.py说:
I used the '$' twice. 所以一个简单的改变是有效的:
注意第二个网址的变化!我的card_purchases应用的url.py看起来像这样:
除此之外,我可以确认命名网址周围的引用是至关重要的!
如果它有帮助的人,我有一个类似的问题,错误是由于两个原因:
我认为您不需要URL条目中的尾部斜杠 . 即,改为:
假设您已启用trailing slashes,这是默认设置 .