Есть ли способ повторно использовать значение тега шаблона в шаблонах Django? - PullRequest
2 голосов
/ 09 августа 2010

Например, допустим, есть пользовательский тег шаблона

{% custom_tag "parameter" %}

Этот тег требует серьезной работы с базой данных для вычисления.

Теперь мне нужно что-то подобное (псевдокод):

if {% custom_tag "parameter" %} 
....
else
....

Я знаю, что с переменными контекста я могу сделать просто:

{% with variable.x.y.z as v %}
 {% if v %}
  Blah-Blah-Blah {{ v }}
 {% else %}
  No value
 {% endif %}
{% endwith %}

Но есть ли способ добиться этого с помощью значения тега шаблона?

EDIT: Единственный вариант, который я придумал, это сделать фильтр из моего тега шаблона:

{% if "parameter" | custom_tag %}
 Blah {{ "parameter" | custom_tag }}
{% else %}
 ....
{% endif %}

Но эта опция заставляет custom_tag выполняться дважды, и это не очень хорошо с точки зрения производительности

Ответы [ 2 ]

3 голосов
/ 09 августа 2010

я не проверял это, но я думаю, что вы можете добавить переменную в контекст из вашего пользовательского тега .. возможно, это поможет вам http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#setting-a-variable-in-the-context

1 голос
/ 09 августа 2010

Я считаю, что вы можете присвоить результаты фильтрации переменной и использовать ее. Таким образом, фильтр будет вызываться только один раз . Из документов: с : кэширует сложную переменную под более простым именем. Это полезно при доступе к «дорогому» методу (например, методу, который попадает в базу данных) несколько раз.

{% with "parameter" | custom_tag as result %}
{% if result %}
    Blah {{ result }}
{% else %}
    ....
{% endif %}
{% endwith %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...