Как установить навигационную ссылку «активная» для нескольких URL с тегами Django - PullRequest
0 голосов
/ 23 января 2019

У меня есть следующий код

navbar.html * * 1004

{% url 'news:list' as news_url %}
{% url 'news:list-detail' as news_url_detail %}
[..]    
<ul class="navbar-nav">
 [..]        
 <li class="nav-item ">
   <a class="nav-link {% if request.path == news_url %}active{% endif %}" href="{{ news_url }}">News<span class="sr-only">(current)</span>
   </a>
 </li>
</ul>

Моя цель - установить активную навигационную ссылку «Новости», даже если текущий URL не является «Новостью» (news_url)

<a class="nav-link {% if request.path == news_url or request.path == news_url_detail %}active{% endif %}" href="{{ news_url }}">News<span class="sr-only">(current)</span>

Как я могу это сделать?

Спасибо за любую помощь, которую вы можете оказать.

РЕДАКТИРОВАТЬ 1 /core/app/urls.py

urlpatterns = [
    [..]
    url(r'^newsandeventi/', include("newsandeventi.urls", namespace='newsandeventi')),
    [..]
]

/ newsandeventi / urls.py

from django.conf.urls import url, include
from newsandeventi.views import ArchiveView, CategoryListView, SearchView, EntryDetailView
# from blog.views import EntryDetailView, CategoryListView, ArchiveView, SearchView, SearchResultView # noqa


urlpatterns = [
    url(r'^$', ArchiveView.as_view(), name='list'),
    url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$', EntryDetailView.as_view(), name='list-detail'),    
    url(r'^categoria/(?P<tag>[-\w .]+)/$', CategoryListView.as_view(), name='category-list'),
]

РЕДАКТИРОВАТЬ 2: /newsandeventi/views.py

class EntryDetailView(DetailView):
    model = Entry
    paginate_by = 1

    def get_queryset(self):
        return Entry.objects.published()

    def get_context_data(self, **kwargs):
        context = super(EntryDetailView, self).get_context_data(**kwargs)
        context['base_url'] = self.request.build_absolute_uri("/").rstrip("/")
        context['alltags'] = Tag.objects.all()
        context['fiveposts'] = Entry.objects.order_by('id')[:5]
        entries= Entry.objects.all()
        context['last_featured'] = entries.filter(featured=True).last()
        return context

Проблема может возникнуть в представлении класса EntryDetailView, когда я вызываю newsandeventi: list-detail, я не передаю аргументы year, month, day, slug.

Если это проблема, как я могу ее решить?

1 Ответ

0 голосов
/ 01 февраля 2019

Проблема в том, что эта строка:

{% url 'news:list-detail' as news_url_detail %}

молча завершится сбоем, поскольку вы не передаете параметры год / месяц / день / слаг, требуемые URL-адресом.Синтаксис {% url ... as var %} не вызывает ошибку в случае сбоя при просмотре.

Лучшим подходом для определения, является ли отображаемая страница EntryDetailView, может быть установка флага вконтекстные данные, а затем проверьте наличие этого флага.

Например:

class EntryDetailView(DetailView):
    ...

    def get_context_data(self, **kwargs):
        ...
        context['is_entry'] = True  # Set a flag
        return context

А затем в шаблоне:

<a class="nav-link {% if request.path == news_url or is_entry %}active{% endif %}" href="{{ news_url }}">News<span class="sr-only">(current)</span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...