【发布时间】:2013-05-12 09:56:15
【问题描述】:
我正在使用 Django 1.5.1
我需要将视图名称作为变量传递给我的模板。
这是我观点的相关部分
return render(request, 'testcases/execute.html', {
'table': table ,
'submit_view': 'testcase_execute' ,
"project": project})
这是我模板的相关部分
<form method="POST" action="{% url submit_view project.slug %}">
{% render_table table %}
<input type="submit"/>
</form>
如您所见,我正在尝试将视图名称 ('testcase_execute') 作为变量 (submit_view) 传递给模板。
但是这样我得到了错误
'url' 需要一个非空的第一个参数。 Django 1.5 中的语法发生了变化,请参阅文档。
我看不出有什么问题,根据这个 SO 线程 (How to pass a variable to {% url %} tag in django?),如果我需要使用带有 url 标签的变量,我不应该加上引号。也有其他 SO 线程告诉同样的事情。
我看到另一个 SO 线程 (Passing variable urlname to url tag in django template) 声明这种事情(使用带有 url 标签的变量)不受支持,我应该为此使用 django-reversetags。
请对此有所了解-是否有官方(Django核心)方法可以做到这一点,或者我应该使用 django-reversetags
【问题讨论】:
-
您是否仔细检查过
submit_view是否在您的模板上下文中?将{{ submit_view }}放入模板时会显示什么? -
你看起来不错。 Reversetags 是旧的,它是在 django 中创建这个新的 url 标签之前。您的错误很可能是因为您没有将 submit_view 变量传递给您的模板
-
找到了问题,感谢您的帮助。正如你们俩所建议的,submit_view 没有到达模板。原因是,上述模板代码来自基础模板 X,而在调用视图使用的实际模板中,其他模板 B 被用作基础。因此,对于任何偶然发现此线程的人,不再需要使用 django-reversetags,Django(至少 1.5 及更高版本)足以将视图名称作为变量传递给 url 标签。谢谢@Alasdair 和 Aldarund
标签: django django-templates django-1.5