每个视图的自定义导航栏

时间:2020-11-12 18:21:15

标签: python django django-class-based-views

我尝试为每个不同的视图执行导航栏。

例如,可以使用href =“ {%url'polls:detail'question.id%}}进行编码吗?

现在,我创建navbar.html

{% for name, link in navbar.items%}
  <li class="nav-item">
    <a class="nav-link" href={{link}}>{{name}}</a>
  </li>
  {% endfor %}

和视图

    class ArticleListView(generic.ListView):
    model = Article
    template_name = 'blog/article_list.html'
    context_object_name = 'articles'
    queryset = Article.objects.all()

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data()
        context['navbar'] = {"Main Page":"/blog/","create":"/blog/create"}
        return context


class ArticleDetailView(generic.DetailView):
    template_name = 'blog/article_detail.html'
    context_object_name = 'article'
    queryset = Article.objects.all()

    def get_context_data(self, **kwargs):
        context = super().get_context_data()
        context['navbar'] = {
            "Main Page": "/blog/",
            "create": "/blog/create",
            "edit": f"/blog/{Article.objects.get(id=self.object.id).id}/update",
            "delete": f"/blog/{Article.objects.get(id=self.object.id).id}/delete",
        }
        return context

1 个答案:

答案 0 :(得分:1)

假设urls.py中定义了相应的博客URL reverse()方法有助于在视图中生成URL。

 from django.urls import reverse

 context['navbar'] = {
        "Main Page": reverse('blog'),
        "create": reverse('blog_create'),
        "edit": reverse('blog_update', args=[self.object.id]),
        "delete": reverse('blog_delete', args=[self.object.id]),
  }

也可以采用模板方式:

 context['navbar'] = {
        "Main Page": 'blog',
        "create": "blog_create",
        "edit": "blog_update",
        "delete": "blog_delete",
  }


{% for name, link in navbar.items%}
  <li class="nav-item">
    <a class="nav-link" href={% url link object.id %}>{{name}}</a>
  </li>
{% endfor %} 
相关问题