Как сделать динамическую переменную контекста c в django шаблоне - PullRequest
0 голосов
/ 14 февраля 2020

Можно ли добавить 2 контекстные переменные вместе в одну контекстную переменную, которая вычисляется во время выполнения? Например: если у меня есть {{contextA}} (что равно 1) и {{contextB}} (что соответствует «зданию»), и я хочу сложить их вместе, чтобы получить контекст {{1building}} Как бы я это сделал? Я пытался:

{{contextA + contextB}}

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

{{contextA |add: contextB}}

{{contextA contextB}}

Я предполагаю, что это невозможно, и это нужно сделать в представлении, используя python, но было бы идеально, если бы я мог просто объединить контекстные переменные в шаблоне.

1 Ответ

1 голос
/ 14 февраля 2020

U может использовать {% with шаблон тега следующим образом (документы здесь -> https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#with)

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

newvar будет иметь новое значение, если в forl oop где contextA или contextB изменяют свое значение.

Поскольку вы хотите показать значение переменной контекста с именем, равным значению newvar, способ достижения sh состоит в создании пользовательский шаблонный тег следующим образом:


@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: Я думаю, что есть некоторые предостережения безопасности, которые необходимо учитывать при этом.

...