使用Pelican,如何在Python代码和主题之间设置或访问变量?

时间:2015-09-04 04:16:37

标签: python pelican

我需要将原始源文件名(* .md文件)传递到sidebar.html。我怎样才能做到这一点?

从这个网站(http://pelican.readthedocs.org/en/3.6.3/themes.html),我了解到一些变量可用,pelicanconf.py文件中的所有大写字母变量也可用,但我不知道如何获取信息例如主题文件中的原始源文件。

1 个答案:

答案 0 :(得分:2)

我认为可能有一种更简单的方法,但使用jinja过滤器对我来说很好(http://linkpeek.com/blog/how-to-add-a-custom-jinja-filter-to-pelican.html

采取的步骤:

预设置

我将原始标记文件的名称设置为YEAR-MONTH-DAY-NAME格式,以便从页面的网址中恢复。

创建过滤器

过滤器被赋予url,并且从url,我可以恢复原始源md文件路径。

def tosource(url):
    # example input
    # posts/2014/01/26/python-unittest-structure/index.html
    # posts/2014/01/26/ocaml-vs-java/index.html
    # posts/2014/01/25/why-ocaml-comparison-with-python/index.html

    if url.startswith("posts"):
        (posts, year, month, day, name) = url.split('/')[:-1]
        res = "%s/%s/%s-%s-%s-%s.md" % (year, month, year, month, day, name)
    else:
        res = "/" # implement later
    return res

更新pelicanconf.py

教鹈鹕过滤器的名称和位置。

import sys
sys.path.append('.')

import sourcename
JINJA_FILTERS = {'sourcename':sourcename.tosource}

OPENCONTENT = "open:///pelican/knowledge_blog/content"

正如http://docs.getpelican.com/en/3.5.0/themes.html#theming-pelican中所写,conf文件中的所有大写字母变量都可以在主题文件中访问。

更新sidebar.html

我在sidebar.html中添加了一行代码,以使用Jinja过滤器获取原始的md文件路径。

Click to <a href="{{ OPENCONTENT }}/{{ output_file|sourcename }}">Edit</a>

生成html

运行make html并进行测试。

enter image description here enter image description here