Я хочу объединить строку в теге шаблона Django, например:
{% extend shop/shop_name/base.html %}
Вот shop_name
моя переменная, и я хочу объединить это с остальной частью пути.
Предположим, у меня есть shop_name=example.com
и я хочу, чтобы результат был расширен shop/example.com/base.html
.
django
django-templates
Ahsan
источник
источник
shop_name
, так что это опасно.shop_name
перед передачей его контексту в представлении,get_context_data
убедитесь, что он переведен с использованиемugettext
вместоugettext_lazy
.Не используйте
add
для строк, вы должны определить пользовательский тег следующим образом:Создать файл:
<appname>\templatetags\<appname>_extras.py
а затем используйте его, как говорит @Steven
Причина, по которой следует избегать
add
:Согласно документам
Если обе переменные являются целыми числами, результат будет неожиданным.
источник
add
«один» просто не используетstr()
в первую очередь и не работает для меня вообще , тогда как ваше решение работает без нареканий{% load <appname>_extras %}
Я изменил иерархию папок
и тогда ниже будет работать.
Теперь можно расширять страницу base.html.
источник
См. Объединение строк в шаблонах Django :
Для более ранних версий Django:
{{ "Mary had a little"|stringformat:"s lamb." }}
Else:
{{ "Mary had a little"|add:" lamb." }}
источник
Посмотрите на
add
фильтр .Изменить: вы можете цепочки фильтров, чтобы вы могли сделать
"shop/"|add:shop_name|add:"/base.html"
. Но это не сработает, потому что это зависит от тега шаблона для оценки фильтров в аргументах, а расширение не работает.Я думаю, вы не можете сделать это в шаблонах.
источник
Из документов:
Этот тег можно использовать двумя способами:
{% extends "base.html" %}
(с кавычками) использует литеральное значение "base.html" в качестве имени родительского шаблона для расширения.{% extends variable %}
использует значение переменной. Если переменная оценивается как строка, Django будет использовать эту строку в качестве имени родительского шаблона. Если переменная оценивается как объект Template, Django будет использовать этот объект в качестве родительского шаблона.Похоже, вы не можете использовать фильтр для управления аргументом. В вызывающем представлении вы должны либо создать экземпляр шаблона предка, либо создать строковую переменную с правильным путем и передать ее в контексте.
источник
Ответ @ error в корне верен, для этого вы должны использовать тег шаблона. Однако я предпочитаю чуть более универсальный тег шаблона, который я могу использовать для выполнения любых операций, подобных этому:
и тогда вы можете использовать это в своем шаблоне:
Как упоминается в комментарии, этот тег шаблона особенно полезен для информации, которая повторяется по всему шаблону, но требует логики и других вещей, которые будут мешать вашим шаблонам, или в случаях, когда вы хотите повторно использовать данные, передаваемые между шаблонами через блоки:
а потом:
Кредит на тег captureas можно получить здесь: https://www.djangosnippets.org/snippets/545/
источник
Работа с
{% with %}
тегом показалась мне довольно сложной. Вместо этого я создал следующий тег шаблона, который должен работать со строками и целыми числами.Затем загрузите тег шаблона в свой шаблон вверху, используя следующее:
Затем вы можете использовать его следующим образом:
Лично я нашел, что с этим работать намного чище.
источник
Вы не можете делать переменные в шаблонах Django. У вас есть два варианта: либо написать свой собственный тег шаблона, либо сделать это на виду,
источник
extends
не имеет возможности для этого. Либо поместите весь путь шаблона в переменную контекста и используйте его, либо скопируйте существующий тег шаблона и измените его соответствующим образом.источник
И множественная конкатенация:
И в шаблоне:
источник