【问题标题】:django templates - string concatenation to variable namedjango 模板 - 字符串连接到变量名
【发布时间】:2023-03-24 18:23:01
【问题描述】:

我想在 django 模板中使用一个变量,这个变量应该由 2 个字符串连接起来。这是一个例子:

我想做:

{% for item in ObjSearch %} ...

ObjSearch 变量应该与 Obj 字符串和 field 变量连接。

要获取字符串,它的工作原理如下:

{{ "Obj"|add:field }}

但不幸的是它不是这样工作的:

{% for item in "Obj"|add:field %}

.

我怎样才能做到这一点?

-----用更好的例子说明-----

从视图中我收到 Objsearch 变量,它是一个列表(实际上是一个查询集,但没关系)。

我不能直接使用Objsearch,搜索部分应该来自一个变量,所以:

"Obj" 是一个字符串 field是一个变量,其值为“搜索”

连接“Obj”字符串和字段变量我将获得所需的 Objsearch,但作为一个字符串,但我想迭代 Objsearch 值。我需要类似 eval 在 python 中的东西。

【问题讨论】:

  • 请澄清什么是字段和 Obj 以及您要达到的目标向我们展示 stackoverflow.com/help/minimal-reproducible-example
  • 我用一个更好的例子编辑了原始问题。我希望它足够清楚。谢谢。
  • 您找错地方来解决这个问题。在您的视图中修复它,而不是您的模板。只需用你需要的东西填充一个已知变量。
  • 这很好,但目前不可能。我无法更改视图文件中的任何内容。
  • 逻辑不是你应该在模板中填充的东西,这看起来确实很复杂,你有多少这些不同的字段?

标签: django django-templates


【解决方案1】:

您可以尝试创建自定义模板标签。

首先创建一个名为 yourapp/templatetags 的文件夹(记得在文件夹中添加一个 init.py 文件)。 然后在新文件夹中创建一个名为 app_filters.py 的文件(名称可以是您想要的任何名称)。在文件中添加:

from django import template
register = template.Library()

@register.filter(name='array_to_string')
def array_to_string(array):
    return ''.join(array)

您现在可以像这样在模板中使用此方法:

{% load app_filters %}

{{array|array_to_string}}

【讨论】:

  • 我认为它仍然只会产生一个字符串,但我需要具有相同名称的变量。
  • 好的,现在我明白你要做什么了。我仍然会使用模板标记方法并在 app_filters.py 中执行逻辑
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 2012-09-30
  • 2011-05-22
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 2011-06-09
相关资源
最近更新 更多