2013-05-17 62 views
0

我使用Django 1.5.1Django的:如何使用模板变量以及网址标签

我需要传递视图名称作为一个变量来我的模板。

这是我的看法

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去

+3

下,你有双重检查了'submit_view'在模板中的上下文?将“{{submit_view}}”放在模板中时会显示什么内容? – Alasdair

+2

你看起来不错。 Reversetags是旧的,它是在django中创建这个新的url标记之前。您的错误很可能是因为您以某种方式没有将submit_view变量传递给您的模板 – Aldarund

+2

发现问题,感谢您的帮助。如同您建议的那样,submit_view未到达模板。 原因是,上述模板代码来自基本模板X,并且在调用视图使用的实际模板中,其他模板B被用作基础。 因此,对于任何人在这个线程上绊倒,没有必要再使用django-reversetags,Django(至少1.5和更高版本)足以将视图名称作为变量传递给url标记。谢谢@Alasdair和Aldarund – binithb

回答

1

{% url 'submit_view' project.slug %}我想这可以帮助你