首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django中创建新闻存档

在Django中创建新闻存档
EN

Stack Overflow用户
提问于 2009-09-29 14:21:56
回答 3查看 1K关注 0票数 2

我希望在python/django中构建一个新闻归档,但我不知道从哪里开始。我需要的看法,以拉出所有的新闻文章,我已经做了,然后我需要把它们分成月和年,这样,例如。

9月09月10月09

然后,我需要在一些视图中,每次为新的月份创建新的新闻文章时,它需要输出新的月份,所以如果新闻文章是在11月写的,那么存档将是,

09年9月10月09年11月

有人能帮上忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-29 16:11:23

一个很好的起点是James Bennett的书Practical Django Projects。除此之外,它还指导您开发一个具有多个基于时间的视图(按月等)的web博客,这些视图应该可以很好地为您的应用程序提供服务。

票数 3
EN

Stack Overflow用户

发布于 2009-09-29 17:08:07

您可以尝试的一种选择是为您的模型创建一个自定义管理器,该管理器提供了一种提取存档的方法。下面是我使用的代码:

代码语言:javascript
复制
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()]

当然,您需要使用以下命令将其附加到模型:

代码语言:javascript
复制
objects = EntryManager()

这将返回一个字典列表,其中包含年份、数字月份、月份名称和条目数量。你可以这样称呼它:

代码语言:javascript
复制
archives = Entry.objects.get_archives()
票数 3
EN

Stack Overflow用户

发布于 2009-09-29 16:01:25

看起来你是在试图创建一个从数据中提取出来的单一视图,然后尝试按日期等进行排序。我不认为这是最好的解决办法。

相反,您可以做的是创建一个视图来显示每个月的文章。我不知道你的模型,但大概是这样的:

代码语言:javascript
复制
articles = ArticleModel.objects.filter(date__month=month, date__year=year)

你将从你的url中得到的月份和年份,fx archive/2009/9。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1492866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档