我正在尝试开发一种优雅的方法来在鹈鹕模板中创建任意元数据,以使结果超链接到现有页面。例如,如果我有一个类别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:作为超链接。这似乎是多余的,根本不使用现有结构。
在设置文件中手动创建映射,该映射具有类似于dict的GOAL_LINKS = {'first_goal' : 'link-to-first-goal.html'},然后在模板中调用GOAL_LINKS.first_goal。同样,此解决方案比我想要的要手动得多。


在一般情况下,是否有人利用现有的元数据和类别结构并减少了手动映射的需要,做了类似的事情或对如何实现这一点有任何想法?

最佳答案

昨天我做了类似的事情。我的网站的结构如下所示:

content
├── pages
│   ├── cars.md
│
├── cars
│   ├── car-page.md


我决定使用the来确定将文章保存在哪里。我的配置文件包含以下几行:

ARTICLE_URL = '{slug}.html'
ARTICLE_SAVE_AS = '{slug}.html'


当我创建一个新文件时,将类别和子条目放在car-page.md的顶部,这将用于告诉Pelican将html文件保存在cars目录中,并将其分类为:

Title: My Car Page
Slug: cars/car-page
Category: cars
...


我发现this answer可以帮助我弄清楚如何遍历car目录中的所有文章,并将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网站(无论是我的网站还是其他网站),看看事情是如何完成的。它确实帮助我了解了事物的组合方式,并使我对可能的事物敞开心opened。这是一个很好的鹈鹕站点列表:https://github.com/getpelican/pelican/wiki/Powered-by-Pelican

关于python - 鹈鹕:创建超链接的元数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45093057/

10-14 19:50