【问题标题】:Django: How to use template variables along with url tagDjango:如何使用模板变量和 url 标签
【发布时间】: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


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 2014-08-09
      • 1970-01-01
      相关资源
      最近更新 更多