0

Проблемы:Перебор модели в шаблоне Django не делает что-либо

Я пытаюсь просто перебрать мою категорию модель и отображение списка категорий. Я успешно сделал это с сообщениями, но по какой-то причине я не могу заставить его работать с моей моделью категорий (это даже не делает его переданным оператором {% if categories %}). Таким образом, <h2>Categories:</h2> и ниже не отображаются вообще.

В настоящее время у меня есть две категории в моей базе данных («Фитнес» и «Питание»). Они находятся в моем админе, и они также отображаются, когда я запрашиваю через командную строку. Я также могу успешно связать их с моей страницей post_detail (и отобразить все сообщения в категории). Тем не менее, я не могу показаться, чтобы перебирать модели, чтобы отобразить все категории, как список ...

Код:

post_list.html

<div class="container"> 
    <h2>Categories:</h2> 
    {% if categories %} 
    <h2>Categories</h2> 
    <ul> 
     {% for category in categories %} 
     <li>{{ category.name }}</li> 
     {% endfor %} 
    </ul> 
    {% endif %} 
</div> 

models.py

from django.db import models 
from django.utils import timezone 
from django.template.defaultfilters import slugify 

class Category(models.Model): 
    name = models.CharField(max_length=255, blank=False, default='') 
    slug = models.SlugField(max_length=100, default='', unique=True) 


    class Meta: 
     verbose_name = "Category" 
     verbose_name_plural = "Categories" 
     ordering = ['name'] 

    def __str__(self): 
     return self.name 

    def __unicode__(self): 
     return self.name 

views.py

from .models import Post, Category 
from .forms import PostForm 
from django.shortcuts import redirect 
from django.db.models import Count 


def category_detail(request, slug): 
    category = get_object_or_404(Category, slug= slug) 

    context = { 
     'category': category, 
     'posts': category.post_set.all() 
    } 

    return render(request,'blog/category_detail.html', context) 

def post_list(request): 
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') 
    context = { 
     'categories': getSortedCategories() 
    } 
    return render(request, 'blog/post_list.html', {'posts': posts}) 

urls.py

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^$', views.post_list, name='post_list'), 
    url(r'^(?P<slug>[-\w]+)/$', views.category_detail, name='category_detail'), 
    url(r'^post/(?P<pk>\d+)-(?P<slug>[-\w]+)/$', views.post_detail, name='post_detail'), 
    url(r'^post/new/$', views.post_new, name='post_new'), 
    url(r'^post/(?P<pk>\d+)/edit/$', views.post_edit, name='post_edit'), 
] 

ответ

4

Вы не передавать категории в контексте шаблона, вам нужно переписать возвращенную выражение как это:

return render(request, 'blog/post_list.html', {'posts': posts, 'categories': getSortedCategories()}) 
Смежные вопросы