我正在使用鹈鹕jinja2模板以生成基于类别的导航菜单,我需要一种方法来控制页面的顺序,或者至少是一种技巧,允许我选择要列出的第一页。
{% for a in articles %}
{% if a.category == category %}
<li><a href="{{ SITEURL }}/{{ a.slug }}">{{ a.title }}
{% endif %}
{% endfor %}
如何使一个特定的文章页面成为第一个。他们的赌注是降价格式。
答案 0 :(得分:8)
Pelican 3.5将引入对文章和页面排序的内置支持。您可以在pelicanconf.py中定义元数据属性文章和页面的排序。这两个变量是:
ARTICLE_ORDER_BY = 'attribute'
PAGE_ORDER_BY = 'attribute'
为了使其正常工作,您必须确保:
有了这样的基础设施,以正确的顺序输出文章应该适用于您的代码而无需修改。
答案 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,否则您可能会遇到麻烦。