如何使用 Django 标签为多个 url 设置导航栏链接"active"



>我有以下代码

navbar.html

{% 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>

我的目标是将导航栏链接"新闻"设置为活动状态,即使当前网址不是"新闻"链接(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传递。

如果这是问题所在,我该如何解决?

问题是这一行:

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

将静默失败,因为您没有传递 URL 所需的年/月/日/slug 参数。如果视图查找失败,{% 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>

最新更新