如何在Django模板中使上下文变量动态

时间:2020-02-14 10:48:20

标签: django django-templates

是否可以将2个上下文变量一起添加到在运行时计算的单个上下文变量中? 例如:如果我有{{contextA}}(等于1)和{{contextB}}(等于“建筑物”),并且我想将它们加在一起以获得上下文{{1building}},我该怎么做? 我尝试过:

{{contextA + contextB}}

{{{{contextA}} + {{contextB}}}}

{{contextA |add: contextB}}

{{contextA contextB}}

我想这是不可能的,这需要在视图中使用python来完成,但是如果我可以在模板中组合上下文变量,那将是理想的选择。

1 个答案:

答案 0 :(得分:1)

U可以如下使用{% with模板标记(此处为文档-> https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#with

{% with newvar=contextA|add:contextB %}
    {{ newvar }}
{% endwith %}

newvar将具有一个新值,如果进入forloop中,contextA或contextB会更改其值。

要显示名称等于newvar值的上下文变量的值时,完成此操作的方法是创建一个custom template tag,如下所示:


@register.simple_tag(takes_context=True)
def dynvarvalue(context, dynvarname):
    """ Returns the value of dynvarname into the context """
    return context.get(dynvarname, None)

我做了一个小的概念证明:

{% with 1building='1 building value' contextA='1' contextB='building' %}
  {% dynvarvalue contextA|add:contextB %}
{% endwith %}

哪个会产生以下输出,我想这就是您要的输出:

1 building value

希望这会有所帮助。


请注意:请注意,如果两个变量都可以转换为整数,则它们不会被串联,并且将按照文档所说的相加(https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#add

注2:我认为这样做有一些安全注意事项。