Bry*_*ock 60 python django django-templates
渲染时捕获异常:
使用参数'()'和关键字参数'{}'找不到'products.views.'filter_by_led'的反转.
我能够成功地products.views.filter_by_led从shell 导入,它工作,所以路径应该是正确的.
这是urls.py:
(r'^led-tv/$', filter_by_led ),
Run Code Online (Sandbox Code Playgroud)
这是生成错误的地方:
href="{% url products.views.filter_by_led %}">
Run Code Online (Sandbox Code Playgroud)
我无法理解,因为这可以从同一个文件中正常工作:
{% url products.views.lcd_screen_size screen_size=50 %}
Run Code Online (Sandbox Code Playgroud)
这是函数定义:
def filter_by_led(request):
Run Code Online (Sandbox Code Playgroud)
我不明白为什么Django会认为该函数无法找到该函数的Reverse.
我删除了所有*.pyc文件并重新启动了Apache.
我究竟做错了什么?
Jia*_*aro 54
我能想到的有三件事:
尝试django.core.urlresolvers.reverse在命令行中使用(可能)更好的错误
>>> from django.core.urlresolvers import reverse
>>> reverse('products.views.filter_by_led')
Run Code Online (Sandbox Code Playgroud)检查您是否有多个指向该视图的网址
kra*_*etz 37
Shell调用反向(如上所述)非常适合调试这些问题,但有两个关键条件:
是的,这是合乎逻辑的.是的,它也令人困惑,因为反向只会抛出异常并且不会给你任何进一步的提示.
URL模式的示例:
url(r'^cookies/(?P<hostname>[^/]+)/(?P<url_id>\d+)/$', 'register_site.views.show_cookies', name='show_cookies'),
Run Code Online (Sandbox Code Playgroud)
然后在shell中发生了什么:
>>> from register_site.views import show_cookies
>>> reverse(show_cookies)
NoReverseMatch: Reverse for 'register_site.views.show_cookies' with arguments '()' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为我没有提供任何参数.
>>> reverse('show_cookies', kwargs={'url_id':123,'hostname': 'aaa'})
'/cookies/aaa/123'
Run Code Online (Sandbox Code Playgroud)
现在它奏效了,但......
>>> reverse('show_cookies', kwargs={'url_id':'x','hostname': 'www.dupa.com'})
NoReverseMatch: Reverse for 'show_cookies' with arguments '()' and keyword arguments '{'url_id': 'x', 'hostname': 'www.dupa.com'}' not found.
Run Code Online (Sandbox Code Playgroud)
现在它不起作用,因为url_id与regexp(预期的数字,提供的字符串)不匹配.
您可以对位置参数和关键字参数使用reverse.语法是:
reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None)
Run Code Online (Sandbox Code Playgroud)
关于url模板标签,有趣的是它.Django 文档给出了使用引用视图名称的示例:
{%url'news.views.year_archive'yearvar%}
所以我在HTML模板中以类似的方式使用它:
{%url'show_cookies'hostname = u.hostname url_id = u.pk%}
但这对我不起作用.但是异常消息给了我一些可能出错的提示 - 注意视图名称周围的双引号:
使用参数反转''show_cookies''
当我删除引号时它开始工作:
{%url show_cookies hostname = u.hostname url_id = u.pk%}
这是令人困惑的.
Cha*_*lie 11
您需要围绕视图名称使用单引号
{% url 'viewname' %}
Run Code Online (Sandbox Code Playgroud)
代替
{% url viewname %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130764 次 |
| 最近记录: |