我尝试为每个不同的视图执行导航栏。
例如,可以使用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
答案 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 %}