Django:如何使用模板变量和 url 标签
Posted
技术标签:
【中文标题】Django:如何使用模板变量和 url 标签【英文标题】:Django: How to use template variables along with url tag 【发布时间】: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
【参考方案1】:
% url 'submit_view' project.slug %
我想这对你有帮助
【讨论】:
【参考方案2】:在 Django 1.3 之前,像
% url myview %
这样的语法被解释 错误地 […][...] 您需要将
% url myview %
等标签更改为% url "myview" %
。 如果您使用的是% load url from future %
,您可以简单地删除 Django 1.5 下的那一行
https://docs.djangoproject.com/en/1.5/releases/1.5/#overview
【讨论】:
以上是关于Django:如何使用模板变量和 url 标签的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中,如何使用模板和 DB 对象中使用的动态 URL 实现样板 HTML 变量?
在 Django url 模板标签中获取 javascript 变量的值
04_Django-模板变量/标签/过滤器/继承-url反向解析
04_Django-模板变量/标签/过滤器/继承-url反向解析