Django+Jinja2.10中使用url别名调用reverse报错:找不到'test'路由
解决Jinja2模板中
url('test')反向解析失败的问题 我之前也碰到过类似的踩坑经历,咱们一步步排查问题:
1. 确认Jinja环境的url函数是否正确绑定Django的reverse
你提到已将url别名设为Django的reverse,但得确保配置代码没出错。正确的Jinja环境配置应该是这样的:
from django.urls import reverse from jinja2 import Environment def environment(**options): env = Environment(**options) env.globals.update({ 'url': reverse, # 必须绑定Django自带的reverse方法,不能用其他同名函数 }) return env
如果这里绑定的不是Django的reverse,反向解析肯定会失效。
2. 检查路由所在APP是否已加入INSTALLED_APPS
如果test路由是放在某个APP的urls.py里,而这个APP没添加到settings.py的INSTALLED_APPS列表中,Django的路由系统会无法识别这个name别名。赶紧去settings.py里补加对应的APP。
3. 排查是否存在URL命名空间(namespace)
如果你的路由是通过命名空间包含进来的,比如根urls.py里写了:
path('myapp/', include('myapp.urls', namespace='myapp'))
那模板里调用时必须带上命名空间:{{ url('myapp:test') }},否则Django找不到对应的路由别名。
4. 确认路由的name参数无拼写错误
再核对一遍你的路由代码:path('test', views.test, name='test'),name='test'有没有大小写错误、多漏字符?这种低级错误很容易被忽略,但却是常见诱因。
5. 重启服务并清除URL缓存
Django开发服务器有时会缓存路由信息,修改路由后没重启的话,新的别名可能没被加载。试试重启你的开发服务器,生产环境的话可以清除一下Django缓存。
6. 在Python代码中直接测试reverse是否可行
先跳过模板,去Django shell里验证路由本身是否正常:
python manage.py shell
然后执行:
from django.urls import reverse reverse('test')
如果这里能成功返回'/test',说明路由没问题,问题出在Jinja环境配置;如果这里也报错,那就是路由配置的问题,回到前面几步重新排查。
内容的提问来源于stack exchange,提问作者Dariush
相关产品推荐
相关产品推荐

