在Django中创建新闻档案

时间:2009-09-29 14:21:56

标签: python django django-models mysql django-templates

我希望在python / django中建立一个新闻档案,我不知道从哪里开始。我需要用我已经完成的所有新闻文章的视图,然后需要在数月和数年内将它们分开,例如。

09年9月 09年10月

然后我需要在视图中为每个新的月份创建一个新的新闻文章,它需要输出新的月份,所以如果在11月写了一篇新闻文章,那么归档就会是,

09年9月 09年10月 09年11月

有人帮忙吗?

3 个答案:

答案 0 :(得分:3)

詹姆斯贝内特的书Practical Django Projects是一个很好的起点。除此之外,它还指导您开发具有多个基于时间的视图(按月等)的Web博客,这些视图应该可以作为您应用程序的基础。

答案 1 :(得分:3)

您可以尝试的一个选项是为您的模型创建自定义管理器,以提供拉出存档的方法。这是我使用的代码:

from django.db import models, connection
import datetime

class EntryManager(models.Manager):
    def get_archives(self, level=0):
        query = """
                    SELECT
                        YEAR(`date_posted`) AS `year`,
                        MONTH(`date_posted`) AS `month`,
                        count(*) AS `num_entries`
                    FROM
                        `blog_entry`
                    WHERE
                        `date_posted` <= %s
                    GROUP BY
                        YEAR(`date_posted`),
                        MONTH(`date_posted`)
                    ORDER BY
                        `year` DESC,
                        `month` DESC
                """
        months = ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December')
        cursor = connection.cursor()
        cursor.execute(query, [datetime.datetime.now()])
        return [{'year': row[0], 'month': row[1], 'month_name': months[int(row[1])-1], 'num_entries': row[2]} for row in cursor.fetchall()]

您当然需要将其附加到模型中:

objects = EntryManager()

这将返回包含年份,数字月份,月份名称和条目数的字典列表。你这样称呼它:

archives = Entry.objects.get_archives()

答案 2 :(得分:0)

看起来你正试图制作一个单独的视图,从数据中提取出来,然后尝试按日期等命令它们。我认为这不是最佳方式。

相反,你可以做的是制作一个视图来显示每个月的文章。我不知道你的模型,但是像:

articles = ArticleModel.objects.filter(date__month=month, date__year=year)

您从网址获得的月份和年份,fx archive / 2009/9。

如果您想确保只显示包含内容的档案的链接,一个简单的解决方案就是获取所有文章并标记包含内容的月份。应该有一个更好的方法来做到这一点,但如果你把它放在一个中间件并缓存它,它应该不是一个问题。