我正在尝试开发一种优雅的方式来在鹈鹕模板中创建任意元数据,以便结果超链接到现有页面。例如,如果我的某个类别goal
的网页first-goal
的结构如下:
content
├── pages
│ ├── goal
│ │ ├── first-goal.md
我希望能够在文章元数据中执行以下操作:
Title: First Article
Goal: first-goal
然后在模板中,从first-goal
元数据中翻译goal
,使其成为该目标网页的链接,例如:
{%- for goal in article.goal %}
<a href="[link to goal page(s)]">goal</a>
{% endfor %}
我曾经有过一些想法:
goal
,并手动添加超链接,然后使用{filename}/pages/goal/first-goal.md
作为goal:
元数据中的超链接。这似乎是多余的,根本不使用现有的结构。GOAL_LINKS = {'first_goal' : 'link-to-first-goal.html'}
的dict的映射,然后在模板中调用GOAL_LINKS.first_goal
。同样,这个解决方案比我想要的手动更多。有没有人做过类似的事情,或者在一般情况下如何实现这一点,利用现有的元数据和类别结构,减少手动映射的需要?
答案 0 :(得分:3)
昨天我做了一些非常相似的事情。我的网站结构看起来像这样:
content
├── pages
│ ├── cars.md
│
├── cars
│ ├── car-page.md
我决定使用slug来确定保存文章的位置。我的配置文件包含以下行:
ARTICLE_URL = '{slug}.html'
ARTICLE_SAVE_AS = '{slug}.html'
当我创建一个新文件时,我将类别和slug放在car-page.md
的顶部,这将用于告诉Pelican将html文件保存在cars
目录中并进行分类就这样:
Title: My Car Page
Slug: cars/car-page
Category: cars
...
我找到了this answer,它帮助我弄清楚如何遍历我的汽车目录中的所有文章,并使用cars.md
文件作为主题的目标网页。在我的page.html
模板文件中,我的循环版本如下所示:
{% block content %}
{{ page.content }}
<ul>
{% for article in articles if page.category == article.category %}
<li><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }} - {{ article.locale_date }}</a></li>
{% endfor %}
</ul>
{% endblock %}
Here是指向我网站的回购链接,以防您想要查看所有拼图内容。我强烈建议您通过另一个或两个Pelican网站(无论是我的还是其他人)来了解事情是如何完成的;它真的帮助我了解事情是如何组合在一起的,并让我开始思考可能的事情。这是一个很好的鹈鹕网站列表:https://github.com/getpelican/pelican/wiki/Powered-by-Pelican