Pelican:创建超链接元数据

时间:2017-07-14 01:04:46

标签: python pelican

我正在尝试开发一种优雅的方式来在鹈鹕模板中创建任意元数据,以便结果超链接到现有页面。例如,如果我的某个类别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 %}

我曾经有过一些想法:

  • 是否有一个很好的插件可以做一些我可以修改的东西?我看过来自pelican-plugins的链接器和链接,它们似乎很接近,但并不完全
  • 我可以修改FORMATTED_FIELDS以包含goal,并手动添加超链接,然后使用{filename}/pages/goal/first-goal.md作为goal:元数据中的超链接。这似乎是多余的,根本不使用现有的结构。
  • 在设置文件中手动创建一个类似于GOAL_LINKS = {'first_goal' : 'link-to-first-goal.html'}的dict的映射,然后在模板中调用GOAL_LINKS.first_goal。同样,这个解决方案比我想要的手动更多。

有没有人做过类似的事情,或者在一般情况下如何实现这一点,利用现有的元数据和类别结构,减少手动映射的需要?

1 个答案:

答案 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