归档页面只取年份及该年内文章计数
哈喽,我又来了。上次非常感谢提供了/archive/年份
的思路,我问了一个比我熟悉API的朋友,顺利搞定了!
于是我想把各年份和计数都写在/archives
里,就像/category/xxx
和/categories
的关系一样。按照API里的示例写法,用get_data取出所有文章并group虽然可行,但是有limit千篇的限制,这个之前您跟我说过,我也理解。那么在不获取文章列表的情况下,有否可能突破千篇限制,只取年份和计数呢?
我试了不用自定义变量空间entries而直接用posts,年份部分是乱码,而且freeze了。
网页地址:https://theme-light.bitcron.com/archives
所用代码:
#archlist
header: h2 按年份
for year in posts: .block
year\_start\_date = '%s-1-1' %year
year\_end\_date = '%s-1-1' %([year.int](http://year.int)+1)
yearly\_count = d.get\_data(types='post', return\_count=true, date\_start=year\_start\_date, date\_end=year\_end\_date)
a(href='/archive/{{year}}')= year + '年'
sup= yearly\_count
所以我又好奇了,entries跟默认的posts在1000篇之内唯一的差别只是是否使用了group函数对吧,为什么entries可用posts不可用呢?另外group了以后运算会轻松很多么?
谢谢!
看来不用代码格式还好一些,重贴一下,看得清楚点吧(?):
#archlist
header: h2 按年份
for year in posts: .block
year_start_date = '%s-1-1' %year
year_end_date = '%s-1-1' %(year.int+1)
yearly_count = d.get_data(types='post', return_count=true, date_start=year_start_date, date_end=year_end_date)
a(href='/archive/{{year}}')= year + '年'
sup= yearly_count
@Shui Baco,
1, for year in posts ---> 这个 year 是 post, 这不是乱码,是正常的数据……
2, return_count, 没有 limit 的限制。
@Shui Baco, 换一个思路试试
得到时间最早的一篇日志,以及最晚的日志,那么获得 year1, year2
for year in range(year1, year2+1), 然后取 count, 有 count 的就好了呀。
不要总是尝试遍历所有的 posts, 或者突破列表数据或许的限制。毕竟,这个限制本身不算限制,只是保证系统稳定的基本边界……
@Hepo 哇好聪明。我也不想遍历所有posts,毕竟随着文章越写越多,对系统的负担会越来越重。谢谢,我去试试看~
@Hepo 这个思路我懂了(突然冒出,暂时不要管我哪里冒出来的……),有个细节问题,year1和year2应该怎么写赋值的语句……
“得到时间最早的一篇日志,以及最晚的日志”应该是这样写吧:
oldest_post = get_data(type='post',limit=1, sort='asc') //按照时间顺序取第一篇文章
latest_post = get_data(type='post',limit=1, sort='desc') //按照时间倒序取第一篇文章
但是这样oldest_post和latest_post都是一个只有一篇文章的集合……
year1 = ???
year2 = ???
这两个句子应该怎么写才能正确取到对应的年份……?
@矩阵良 oldest_post.date.year 应该就能得到 :)
@Hepo 明白了,给万能的散发着人性光辉的Hepo鼓掌!
@Hepo 试了一下,好像不能正确拿到对应的年份……
测试的时候的代码:
block content
oldest_post = get_data(type='post',limit=1, sort='asc')
latest_post = get_data(type='post',limit=1, sort='desc')
year_oldest = oldest_post.date.year
year_latest = latest_post.date.year
span= year_oldest //这一行以及下面一行都没有span出数字,编译出来的html是<span></span>
span= oldest_post.date.year
for year in range(year_oldest.int, year_latest.int+1)
year_start_date = '%s-1-1' %year
year_end_date = '%s-1-1' %(year.int+1)
yearly_count = d.get_data(types='post', return_count=true, date_start=year_start_date, date_end=year_end_date)
a(href='/archive/{{year}}')= year
最终a(href='/archive/{{year}}')= year取出来的是“r a n g e ( ) i n t e g e r e n d a r g u m e n t e x p e c t e d , g o t s t r .”,其中每一个字符是组的一个元素……突然发囧2333
@矩阵良
oldest_post = get_data(type='post',return_one=True, sort='asc')
latest_post = get_data(type='post',return_one=True, sort='desc')
limit=1, 返回的是 list, list 上没有 date 这个属性。
@Hepo 示例页面:https://theme-light.bitcron.com/archives
@水八口
oldest_post = get_data(type='post',return_one=True, sort='asc')
latest_post = get_data(type='post',return_one=True, sort='desc')
limit=1, 返回的是 list, list 上没有 date 这个属性。
@Hepo 谢谢!搞定了~
不好意思问一下最后一个问题,年份能不能倒叙排列呢?
https://theme-light.bitcron.com/archives
@水八口 range(year_latest.int, year_oldest.int-1, -1)
@Hepo 太感谢了(抹泪),添麻烦了!