Синтаксис «подстановки переменных» ({{ somevar }}
) действительно не поддерживается в аргументах templatetags - это имеет смысл, если учесть, что в контексте рендеринга шаблона этот синтаксис будет эквивалентен выражению «print».
Это не значит, что вы не можете передавать переменные контекста в теги-шаблоны - иначе теги-шаблоны будут иметь очень ограниченное использование - но вы делаете это, просто упоминая их, т.е. предполагая, что у вас есть переменная контекста с именем «путь»,Вы можете использовать его здесь как
{% if request.path==path %}
...
Вы также можете использовать здесь выражения фильтра, т.е. это также верно:
{% if request.path==path|lower %}
(при условии, что автор шаблона тега правильно обработал аргументы тегов - Iпозвольте вам обратиться к документации для получения дополнительной информации по этому вопросу.
Теперь в связи с вашей проблемой вы, конечно, можете использовать пользовательский фильтр для объединения различных частей, но на самом деле это будеточень плохая идеяОбработка URL в Django основана на идее, что вы на самом деле никогда не должны жестко кодировать URL-адрес где-либо - вы определяете и имя url в ваших urls.py
файлах, а затем используете встроенные функции (django.core.urlresolvers.reverse()
) / templatetags ({% url %}
) для их генерации.
Здесь правильным решением было бы определить метод get_absolute_url()
для вашего sub_cat
объекта, который возвращает правильный URL-адрес (фактически его часть пути) для этого объекта, и проверить его в шаблоне.,
Насколько я понимаю, я бы даже использовал второй уровень косвенности в качестве фильтра шаблонов, чтобы 1 / ваша модель (или какая бы то ни была sub_cat
) знает свой собственный URL, а 2 / шаблонфильтр может определить, является ли данный sub_cat
«активным» для текущего request.path
, поэтому, если спецификация, определяющая, когда sub_cat «активен», должна измениться, у вас будет только функция фильтра шаблонов, которую нужно изменить, вместо необходимости просматриватьчерез все ваши шаблоны (возможно, чего-то не хватает в пути).