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反向解析

04_Django-模板变量/标签/过滤器/继承-url反向解析

我将如何在 Django 模板标签中使用模板上下文变量的值? [复制]