Это нормально, чтобы добавить слеш в коде ниже в шаблоне Django? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь решить проблему. В процессе я получил этот вопрос.

{% if request.path == '/{{sub_cat.sub_cat_parent.cat_slug}}/{{sub_cat.sub_cat_slug}}/' %} 
            <div class="alert-secondary">Active</div>
{% else %}

Как правильно включить косую черту здесь '/{{sub_cat.sub_cat_parent.cat_slug}}/{{sub_cat.sub_cat_slug}}/'? Можно ли использовать {{ внутри {% тегов шаблона? что я тут не так делаю?

Ответы [ 2 ]

3 голосов
/ 17 июня 2019

Синтаксис «подстановки переменных» ({{ 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 «активен», должна измениться, у вас будет только функция фильтра шаблонов, которую нужно изменить, вместо необходимости просматриватьчерез все ваши шаблоны (возможно, чего-то не хватает в пути).

0 голосов
/ 17 июня 2019

использовать с пунктом

{% with "/"|add:sub_cat.sub_cat_parent.cat_slug|add:"/"|add:sub_cat.sub_cat_slug|add:"/" as url_path %}

    {% if request.path == url_path %} 
      <div class="alert-secondary">Active</div>
    {% else %}

{% endwith %}

это будет работать

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