Контекст из 'views.py' не отображается в 'base.html' - Django - PullRequest
0 голосов
/ 07 июля 2019

Я не могу найти, в чем проблема, поэтому я хочу создать элемент 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 голосов
/ 08 июля 2019

Чтобы отобразить статью и категории на одной странице, вы можете сделать следующее:

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' %} в начале для отображения вашей статьи. Кроме того, обратите внимание на представления на основе классов для простых списков рендеринга и подробную информацию для экземпляров ваших моделей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...