我希望在python / django中建立一个新闻档案,我不知道从哪里开始。我需要用我已经完成的所有新闻文章的视图,然后需要在数月和数年内将它们分开,例如。
09年9月 09年10月
然后我需要在视图中为每个新的月份创建一个新的新闻文章,它需要输出新的月份,所以如果在11月写了一篇新闻文章,那么归档就会是,
09年9月 09年10月 09年11月
有人帮忙吗?
答案 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。
如果您想确保只显示包含内容的档案的链接,一个简单的解决方案就是获取所有文章并标记包含内容的月份。应该有一个更好的方法来做到这一点,但如果你把它放在一个中间件并缓存它,它应该不是一个问题。