我有一个简单的博客应用程序,我正在移植到Django。我遇到的一个绊脚石是按月汇总文章条目,并将其显示为列表。 db中的每篇文章都有一个简单的日期时间字段。 HTML输出应该是这样的:
等
我目前正在模板中使用{%foreach%}块来循环查询返回的所有月份。
使用日期('datestamp','month')似乎是正确的方向,但是如何在结果中获得文章计数,以及如何将月份整数格式化为模板中的名称字符串?< / p>
答案 0 :(得分:0)
您可以使用django-cube。在views.py中使用以下代码(然后在网址中连接entry_count
),您应该得到所需内容:
# cube declaration
from cube.models import Cube, Dimension
class EntryCube(Cube):
#replace <your_date_field> by the field name
month = Dimension('<your_date_field>__month')
year = Dimension('<your_date_field>__year')
@staticmethod
def aggregation(queryset):
return queryset.count()
# views declaration
from .models import <YourModel> #replace by your model
from cube.views import table_from_cube
def entry_count(request):
cube = EntryCube(<YourModel>.objects.all())
return table_from_cube(request, cube, ['year', 'month'], template='table.html')
#template 'table.html' is in 'example/template' folder, copy it in your template folder, and modify it to your wish.
编辑:
如果您想自定义尺寸的显示方式,您可以将Dimension
作为子类(请参阅此snippet):
class MonthDimension(Dimension):
@property
def pretty_constraint(self):
#just return the month name according to the month number that you can get in "self.constraint", e.g. self.constraint = 1 -> return 'january'
return month_name
(我计划提供维度的子类,以允许不同的格式,如你所需。所以如果你使用django-cube,并编写一个好的Dimension
子类来格式化日期,我很乐意接受看看吧!)
好的......对你想要的东西来说太过分了。但是,如果您之后决定需要更多关于条目的统计信息(例如条目数/作者/月/年/标签等等),则只需向多维数据集添加维度即可。如果您决定使用它,并需要更多帮助,请询问!