来自“ views.py”的上下文未显示在“ base.html”上-Django

时间:2019-07-07 20:57:27

标签: python django

我找不到问题所在,因此我想为我的每个类别创建li元素。这是我的代码:

views.py:

def categories(request):
    context = {
        'category_list':  Category.objects.all(),
    }
    return render(request, 'base.html', context)    

base.html:

<nav id="header-nav">
<ul id="nav-ul" class="menu font-reg clearfix">
<li class="menu-item menu-item-has-children">
<a href="">Blog<span class="sub-drop-icon fa fa-angle-down"></span></a>
<ul class="sub-menu sub-menu-first">
{% for category in category_list %}
<li><a href="#">{{ category.name }}</a></li>
{% endfor %}
</ul>
</li>
<li class="menu-item menu-item-has-children">
<a href="about-1.html">About</a>
</li>
<li class="menu-item menu-item-has-children">
<a href="contact-1.html">Contact</a>
</li>
</ul>
</nav>

urls.py:

urlpatterns = [
    path('', views.index),
    path('article/<slug:article_slug>', views.article, name='article'),
]

类别:

class Category(models.Model):
    def __str__(self):
        return self.name
    name = models.CharField(max_length=20)

1 个答案:

答案 0 :(得分:0)

要在同一页面上显示文章和类别,可以执行以下操作:

urls.py

urlpatterns = [
    path('', views.index),
    path('article/<slug:article_slug>', views.article, name='article'),
]

models.py

最好将def __str__放在所有字段下面。

class Category(models.Model):
    name = models.CharField(max_length=20)

    def __str__(self):
        return self.name

views.py

您需要在一个视图中传递文章和类别。

def article(request, slug):
    context = {
        'article': Article.objects.get(slug=slug),
        'category_list':  Category.objects.all()
    }
    return render(request, 'base.html', context)

base.html

显示类别列表:

{% for category in category_list %}
    <li><a href="#">{{ category.name }}</a></li>
{% endfor %}

注意:

用一开始的article.html行创建一个单独的{% extends 'base.html' %}页面来呈现您的文章将更具意义。 此外,请注意Class-based views的简单渲染列表和有关模型实例的详细信息。