【问题标题】:Problems with rendering page on Django framework在 Django 框架上渲染页面的问题
【发布时间】:2015-08-22 08:07:33
【问题描述】:

我有新闻和新闻的类别,但我不知道如何使用属于同一类别的新闻列表来呈现页面。希望你能帮助我。 这是我的 model.py 文件:

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),
)

谢谢!

【问题讨论】:

标签: python django django-templates django-views


【解决方案1】:

我认为这应该可以完成工作:

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})

【讨论】:

    【解决方案2】:

    在 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 以使其动态。

    重写

    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 %}
    

    【讨论】:

    • 谢谢@moonstruck。我和你写的一样,但是当我尝试访问地址 ..//news//(在我的情况下是 /news/kids-garden/)时,我收到错误“找不到页面(404 ), 没有找到与查询匹配的新闻”。但我有 3 条此类新闻。
    • 试试这个news = News.objects.filter(category__slug='categoryslug')
    • 我在 urls.py 文件中用 CategoryNews 更改了地方 NewsDetailView。 CategoryNews 开始工作!但是 NewsDetailView 停止工作。它引发错误“类别匹配查询不存在”
    • 这是因为两个 url 模式几乎相同。最好将类别网址更改为这样的内容。 url(r'^category/(?P&lt;categoryslug&gt;\w+)/$', views.CategoryNews, name='category'), 并更新模板上的链接(如果有)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2018-05-30
    • 1970-01-01
    相关资源
    最近更新 更多