Тег Django - лучший способ разрешить строку с переменной - PullRequest
2 голосов
/ 23 февраля 2012

У меня есть тег, который имеет переменную, которая является строкой с встроенной переменной.Есть ли лучший способ оценить это, чем:

{% custom_extends  "this_{{is.a.test}}" %}

- backend

string_with_variable = "this_{{is.a.test}}"
result = Template(string_with_variable).render(context)

Это работает, но я не был уверен, была ли какая-либо функция более низкого уровня, которая выполняеттак же.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Полагаю, сегодня утром я немного дремучий. Проблема в том, что some_custom принимает параметр, в котором есть ссылка на встроенную переменную? Или вы хотите, чтобы параметр до some_custom был разрешен до его передачи (что является более общей ситуацией)?

Если это последний случай, проверьте Expr templatetag . С этим вы можете сделать что-то вроде:

{% expr "this_"+is.a.test as some_string %}
{% some_custom some_string param %}

Обновление для комментария:

Поскольку это для {% extends %}, который, как вы правильно указали, должен быть самой первой строкой в ​​файле, просто установите переменную в своем представлении, например, my_custom_template = "this_"+is.a.test+".html" и передать его в контексте. Тогда в своем шаблоне вы можете сказать {% custom_extends my_custom_template %} и все готово.

Конечно, это предполагает, что ваш тег custom_extends имеет переменное разрешение, как обычный тег extends, но это легко добавить в ваш код. См. django/template/loader_tags.py, ExtendsNode.get_parent() о том, как код ядра делает это.

0 голосов
/ 22 мая 2012

Ответ - нет.На данный момент, если вы хотите разрешить / отобразить строку, вам нужно создать экземпляр Template и вызвать render с вашим контекстом.

result = Template("this_{{is.a.test}}").render(context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...