Django模板中如何通过视图传递的变量实现URL反向解析?
Django模板中{% url %}标签使用变量的正确方式
这个问题我之前也碰到过,其实是Django模板标签的语法使用误区导致的,我来给你拆解下解决办法:
问题根源
你原来的写法{% url {{ url }} %}是错误的,因为Django的模板标签(比如{% url %})本身就支持直接引用上下文里的变量,不需要再用{{ }}包裹——模板标签内部已经具备解析上下文变量的能力,嵌套使用反而会触发语法错误。
正确的实现方式
1. 保持视图代码不变
你的视图函数里的上下文传递是完全没问题的:
def foo_bar(request): context = { 'url': 'app_name:foo' } return render(request, 'template.html', context)
2. 修改模板中的{% url %}调用
直接把上下文变量名作为参数传给{% url %}标签即可,不需要嵌套{{ }}:
<form action="{% url url %}"> ... </form>
扩展:带参数的URL处理
如果你的URL需要传递额外参数(比如app_name:foo需要一个pk参数),也可以直接在标签后追加变量:
- 视图中传递参数:
def foo_bar(request): context = { 'url': 'app_name:foo', 'item_id': 123 } return render(request, 'template.html', context)
- 模板中调用:
<form action="{% url url item_id %}"> ... </form>
这样就能完美解决"ID expected"的错误啦!
内容的提问来源于stack exchange,提问作者JM Lontoc
相关产品推荐
相关产品推荐

