2015-06-07 2 views
-3

У меня есть категории новостей и новостей, и я не знаю, как отображать страницу со списком новостей, относящихся к одной и той же категории. Надеюсь, ты поможешь мне в этом. это мой model.py файл:Проблемы с страницей рендеринга на основе Django

from django.db import models 

class Category(models.Model): 
     class Meta: 
       verbose_name_plural = u'Categories' 

     category = models.CharField(max_length=255) 
     slug = models.CharField(max_length=255) 

     def __unicode__(self): 
       return self.category 

class News(models.Model): 

     class Meta: 
       verbose_name_plural = u'News' 

     title = models.CharField(max_length=255) 
     category = models.ForeignKey(u'Category', related_name=u'Category', blank=True, null=True) 
     pub_date = models.DateTimeField('date published') 
     slug = models.CharField(max_length=255) 
     short_content=models.TextField(max_length=2000, blank=True) 
     content = models.TextField(max_length=10000) 
     image = models.FileField(u'Images', upload_to='media/img/news', blank=True) 


     def __unicode__(self): 
       return self.title 

views.py:

from django.shortcuts import render 
from django.views.generic import ListView, DetailView 
from news.models import News 

class NewsListView(ListView): 
     template_name ='news/list.html' 
     context_object_name = 'news_list' 

    def get_queryset(self): 
      return News.objects.order_by('-pub_date') [:5] 


class NewsDetailView(DetailView): 
    model=News 
    template_name = 'news/detail.html' 

def CategoryNews(request, categoryslug): 
    category = Category.objects.get(slug=categoryslug) 
    news = News.objects.filter(category=category) 
    return render (request, 'news/category_news.html', {'category' : category}) 

urls.py:

django.conf.urls import patterns, url 
from news.views import NewsListView, NewsDetailView 
from news import views 

urlpatterns = patterns('', 
     url(r'^$', NewsListView.as_view(), name='list'), 
     url(r'^(?P<slug>[-_\w]+)/$', NewsDetailView.as_view()), 
     url(r'^kids-garden/$', views.CategoryNews), 
) 

Спасибо!

+0

Учебник Джанго фактически охватывает эту точную ситуацию. https://docs.djangoproject.com/en/1.8/intro/tutorial01/ https://docs.djangoproject.com/en/1.8/topics/class-based-views/generic-display/#dynamic-filtering – JSchwerberg

ответ

0

На CategoryNews просмотра добавлять новости, чтобы сделать контекст. Это приведет к появлению новостей в шаблонах.

def CategoryNews(request, categoryslug): 
    category = Category.objects.get(slug=categoryslug) 
    news = News.objects.filter(category=category) 
    return render (request, 'news/category_news.html', {'category' : category, 'newsitems': news}) 

Добавить название группы в категорию URL, чтобы сделать ее динамичной.

Rewrite

url(r'^kids-garden/$', views.CategoryNews, name='category'), 

в

url(r'^category/(?P<categoryslug>\w+)/$', views.CategoryNews, name='category'), 

В category_news.html

{%for news in newsitems%} 

    {{ news.title }} 
    {{ news.content }} 
    # rest values........... 
{% endfor %} 
+0

Thank Вы @moonstruck. Я сделал то же, что и вы, но когда я пытаюсь получить доступ к адресу .//news// (в моем случае это/news/kids-garden /), я получил ошибку «Страница не найдена (404), Не найдено новостей, соответствующих запросу ". Но у меня есть 3 новости в этой категории. –

+0

Попробуйте это 'news = News.objects.filter (category__slug = 'categoryslug')' – moonstruck

+0

Я меняю места NewsDetailView с CategoryNews в файле urls.py. И CategoryNews начинают работу! Но NewsDetailView перестает работать. Это вызывает ошибку «Запрос соответствия категории не существует» –

0

Я думаю, что это должно сделать работу:

views.py

.... 
from news.models import News, Category 

def CategoryNews(request, categoryslug): 
    category_news = News.objects.filter(category__slug='categoryslug') 
    return render (request, 'news/category_news.html', {'category_news' : category_news}) 
Смежные вопросы