我希望在python/django中构建一个新闻归档,但我不知道从哪里开始。我需要的看法,以拉出所有的新闻文章,我已经做了,然后我需要把它们分成月和年,这样,例如。
9月09月10月09
然后,我需要在一些视图中,每次为新的月份创建新的新闻文章时,它需要输出新的月份,所以如果新闻文章是在11月写的,那么存档将是,
09年9月10月09年11月
有人能帮上忙吗?
发布于 2009-09-29 16:11:23
一个很好的起点是James Bennett的书Practical Django Projects。除此之外,它还指导您开发一个具有多个基于时间的视图(按月等)的web博客,这些视图应该可以很好地为您的应用程序提供服务。
发布于 2009-09-29 17:08:07
您可以尝试的一种选择是为您的模型创建一个自定义管理器,该管理器提供了一种提取存档的方法。下面是我使用的代码:
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()发布于 2009-09-29 16:01:25
看起来你是在试图创建一个从数据中提取出来的单一视图,然后尝试按日期等进行排序。我不认为这是最好的解决办法。
相反,您可以做的是创建一个视图来显示每个月的文章。我不知道你的模型,但大概是这样的:
articles = ArticleModel.objects.filter(date__month=month, date__year=year)你将从你的url中得到的月份和年份,fx archive/2009/9。
如果您想确保只显示包含内容的档案的链接,一个简单的解决方案是获取所有文章并标记包含内容的月份。应该有一种更好的方法来做到这一点,但是如果你把它放在一个中间件中并缓存它,这应该不是问题。
https://stackoverflow.com/questions/1492866
复制相似问题