Как установить переменную внутри шаблона Django - PullRequest
0 голосов
/ 23 марта 2019

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

Это работает:

{% for key, value in v.items %}
   {% if key == 'title' %}<tr>{{ value }}</tr>{% endif%}
   {% if key == 'name' %}<tr>{{ value }}</tr>{% endif%}
{% endfor %}

Это не работает:

{% for key, value in v.items %}
   {% if key == 'title' %}{% with title as value %}{%$ endwith %}{% 
endif%}
   {% if key == 'name' %}{% with name as value %}{%$ endwith %}{% 
endif%}
{% endfor%}
<tr>{{ title }}</tr><tr>{{ name }}</tr> 

Я хочу установить VAR внутри шаблона django из значения dict!

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

Решение от @geekfish:

{% for key, value in v.items %}
    <tr>{{ v.title }}</tr><tr>{{ v.name }}</tr>
{% endfor%}

;)

0 голосов
/ 23 марта 2019

with используется для определения локального контекста, а не для «установки переменной». Итак, как сказал Панкадж, ваши переменные не будут работать, если они не находятся в пределах {% with ... %}{% endwith %}

Обратите внимание, что это должно быть with existing_var as new_var_name, а не наоборот. Вам также не нужно $, чтобы закрыть тег.

Так что это выведет переменные (не совсем так, как вы хотите, но они будут отображаться):

{% for key, value in v.items %}
   {% if key == 'title' %}{% with value as title %}{{ title }}{% endwith %}{% 
endif%}
   {% if key == 'name' %}{% with value as name %}{{ name }}{% endwith %}{% 
endif%}
{% endfor%}

Однако вам не нужно этого делать (и просто бессмысленно просто менять имя переменной). Если v словарь, почему бы не сделать:

<tr>{{ v.title }}</tr><tr>{{ v.name }}</tr>

Как правило, вы не должны пытаться устанавливать переменные в шаблоне Django. Если вам нужно извлечь данные / выполнить преобразования, вам, вероятно, следует сделать это в своем представлении или с помощью тега шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...