如何控制鹈鹕文章类别中的页面顺序?

时间:2013-08-29 20:05:09

标签: python jinja2 pelican

我正在使用鹈鹕jinja2模板以生成基于类别的导航菜单,我需要一种方法来控制页面的顺序,或者至少是一种技巧,允许我选择要列出的第一页。

{% for a in articles %}
     {% if a.category == category %}
         <li><a href="{{ SITEURL }}/{{ a.slug }}">{{ a.title }}
     {% endif %}
{% endfor %}

如何使一个特定的文章页面成为第一个。他们的赌注是降价格式。

5 个答案:

答案 0 :(得分:8)

Pelican 3.5将引入对文章和页面排序的内置支持。您可以在pelicanconf.py中定义元数据属性文章和页面的排序。这两个变量是:

ARTICLE_ORDER_BY = 'attribute'
PAGE_ORDER_BY = 'attribute'

为了使其正常工作,您必须确保:

  • 每个页面/文章定义指定的属性,否则您将收到编译器错误,指出页面/文章类没有此属性
  • 您的属性始终使用相同数量的字符;因此值1,10和100将不会产生正确的顺序,但001,010和100将执行

有了这样的基础设施,以正确的顺序输出文章应该适用于您的代码而无需修改。

答案 1 :(得分:6)

您可以使用Pelican的custom page metadata和Jinja2的内置sort过滤器进行排序。

示例模板:

{% for pg in PAGES|sort(attribute='sortorder') %}
    <li{% if pg == page %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ pg.url }}">{{ pg.title }}</a></li>
{% endfor %}

示例页面元数据:

title: User's Manual
date: 2014-06-11 15:11
sortorder: 20

答案 2 :(得分:6)

要解决此问题,您可以禁用自动显示的类别和页面,并在配置中手动设置菜单项:

DISPLAY_CATEGORIES_ON_MENU = False
DISPLAY_PAGES_ON_MENU = False

MENUITEMS = (
    ('Home', '/'),
    ('Archives', '/archives.html'),
    ('Tags', '/tags.html'),
    ('Category1', 'category/category1.html'),
    ('Category2', 'category/category2.html'),
)

答案 3 :(得分:0)

现在看来这还不可能。 https://github.com/getpelican/pelican/issues/420

上有功能请求和过期补丁

一旦集成,我会更新答案。

答案 4 :(得分:0)

使用pelican 4.0.1和pelican-bootstrap3,根本无法对页面和文章类别的菜单项进行排序,因为它们在基本模板中分别进行了排序:首先是页面(已排序),然后是类别(似乎没有排序)。因此页面总是放在类别的前面。

此外,在模板中,通过设置选项PAGES_SORT_ATTRIBUTE控制页面项目的排序,因此,如果文档中提到的PAGE_ORDER_BY选项不起作用,请尝试在您的pelicanconf.py中设置该项目。

有点可惜,但是jcollado的this答案似乎确实解决了这个问题,无论如何您将拥有几个菜单项?

但是我必须对其进行一些调整:

DISPLAY_CATEGORIES_ON_MENU = False
DISPLAY_PAGES_ON_MENU = False

MENUITEMS = (
    ('Projects', '/category/projects.html'),
    ('Publications', '/pages/Publications.html'),
    ('Music', '/category/music.html'),
    ('About', '/pages/about.html'),
)

以正斜杠启动URI,否则您可能会遇到麻烦。