归档页面只取年份及该年内文章计数

哈喽,我又来了。上次非常感谢提供了/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了以后运算会轻松很多么?

谢谢!

2017-11-15 11:03 from Shui Baco
Comments
Write a Comment
  • 看来不用代码格式还好一些,重贴一下,看得清楚点吧(?):

    #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

  • Hepo reply

    @Shui Baco,

    1, for year in posts ---> 这个 year 是 post, 这不是乱码,是正常的数据……

    2, return_count, 没有 limit 的限制。

  • Hepo reply

    @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 = ???

      这两个句子应该怎么写才能正确取到对应的年份……?

      • Hepo reply

        @矩阵良 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

          • Hepo reply

            @矩阵良

            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

          • Hepo reply

            @水八口

            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

              • Hepo reply

                @水八口 range(year_latest.int, year_oldest.int-1, -1)

                • @Hepo 太感谢了(抹泪),添麻烦了!