3

我可以在我网站的索引页面上使用通用视图预览我的新闻剪辑数据库中的 100 个最新项目:

DPRM

现在我需要在我网站的一个单独的逻辑部分中对我的数据库进行分页。我需要按年分页。我不在乎每年有多少条目,我只想从 URL 中获取年份,从那一年获取数据库项目(即 /newsitems/validyearhere),然后通过导航方式将其呈现给用户通过多年。在 Rails 中有一种方法可以做到这一点,但我在 Django 中找不到方法。

我可以使用当前部署的模型吗?

from django.db import models

class Article(models.Model):
    headline = models.CharField(max_length=100)
    subhead = models.CharField(max_length=50)
    publication = models.CharField(max_length=30)
    author = models.CharField(max_length=50)
    date = models.DateField()
    website = models.URLField()

    def __unicode__(self):
        return self.headline

除了当前日期字段之外,我是否必须添加一个多余的年份数据库字段?模式是否需要以任何方式发展以适应这种情况?

如果用户输入一年没有条目或数据不是一年,我也需要它优雅地失败。

请尽可能简单地解释这一点,因为我对 Django 非常陌生,并且发现学习曲线陡峭。

4

2 回答 2

7

使用新的基于类的视图,使用 YearArchiveView 很容易

class ArticleYearArchiveView(YearArchiveView):
    model = Article
    paginate_by = 100
    context_object_name = 'article_list'
    date_field = 'date'
    allow_empty = True

允许为空是即使当年没有元素也显示页面

在你的urls.py你需要类似的东西

url(r'^newsitems/(?P<year>\d+)/$', ArticleYearArchiveView.as_view()),
于 2011-12-24T12:50:30.207 回答
1

是的,你的模型很好。为什么不写一个基于类的视图呢?

class SomeListView(ListView):
    model = Article
    paginate_by = 100
    template_name = "app/template.html"
    context_object_name = "articles" # or use object_list

    def get_queryset(self):
        return Article.objects.order_by('-date')

您可以在 get_queryset 中添加不同的过滤器以按年份创建包含结果的列表,并且在您的模板中您可以遍历它们并创建自定义按钮(带有年份信息)

于 2011-12-24T12:35:54.780 回答