Как проверить Request.path в Django?

Вот код urls.py
url(r'^category/(?P<cat_id>\d+)$',  'adst.views.alboms', name='Albom'),


Надо проверить по данном урл и добавить клас к ссылке activate
Пытался вот так. Не помогло.
{% for cat in categor %}
          <li  {% if  cat.id_cat in request.path %}class="active"{% endif %} >
             <a href="{% url "Albom" cat.id_cat %}">{{ cat.Name_cat }}</a>
             <span class="sr-only">(current)</span>
              </li>
              {% endfor %}
  • Вопрос задан
  • 2514 просмотров
Пригласить эксперта
Ответы на вопрос 3
@marazmiki
Укротитель питонов
А точно id_cat? По умолчанию джанга делает совсем не так. Обычно у моделей первичный ключ называется id. Или, если использовано нестандартное название, можно обратиться к нему через алиас pk.

Таким образом, если я правильно понял, что речь идёт о переборе кверисета, то условие должно выглядеть как-то так:

<li  {% if  cat.id in request.path %}class="active"{% endif %} >


Не самое, надо сказать, удачное решение. Правильнее было бы, к примеру, реализовать у модели метод get_absolute_url() и сравнивать request.path с ним в цикле.
Ответ написан
@deliro
id_alb = models.AutoField(primary_key=True) - плохая практика. С какой целью вы изменили стандартный id на точно такой же, но назвали id_alb?
В общем-то, это не единственное замечание к Вашему коду. URL у Вас называется с заглавной буквы и, вообще, называется русским транслитом (очень плохая практика). {% url 'Albom' cat.id_cat %} нужно заменить на {{ cat.get_absolute_url }} и, соответственно, в models.py добавить метод модели Cat:
# В начале:
from django.core.urlresolvers import reverse
# Метод модели:
def get_absolute_url(self):
    return reverse('name_of_your_detail_view_for_cutties', args=[self.pk])


Название поля cat.Name_cat - дублирование + заглавная буква в переменной (а нужно cat.name). в URLах регулярка должна заканчиваться /$, а не просто $. В общем, дело Ваше, но я советую почитать PEP8.
Ответ на Ваш вопрос намного проще:
$(function(){
  function stripTrailingSlash(str) {
    if(str.substr(-1) == '/') {
      return str.substr(0, str.length - 1);
    }
    return str;
  }

  var url = window.location.pathname;
  var activePage = stripTrailingSlash(url);

  $('.nav li a').each(function(){
    var currentPage = stripTrailingSlash($(this).attr('href'));

    if (activePage == currentPage) {
      $(this).parent().addClass('active');
    }
  });
});
Ответ написан
@Vladisus
советую посмотреть на django-activelink
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы