Sphinx - 添加要在HTML模板中使用的自定义字段/变量

时间:2013-02-08 14:21:13

标签: html variables python-sphinx

我正在尝试从.rst文件中提取要包含在HTML模板中的元信息。 我假设如果我放了像

这样的东西
.. :newVariable: My Text

进入.rst文件然后使用我自己的模板构建HTML,我将能够在HTML标头中包含newVariable。但它不起作用。我尝试了几件事无济于事。

这是否可以在不修改Sphinx源的情况下解决?

2 个答案:

答案 0 :(得分:4)

在.rst文件中,在顶部放置一个字段列表,其中包含您要传递的变量名称和值。 meta信息不是必需的,但会显示,以便您可以查看代码的放置位置。

.. meta::
   :author: My Company, Inc.
   :description: Introduction to ...
   :copyright: Copyright © 2014 My Company, Inc.

:my-variable: my variable's value

.. _introduction:

==================================================
Introduction to ....
==================================================

在您的模板中,您现在可以使用以下代码访问my-variable

{%- set my-variable = '' %}
{%- set my-variable_key = 'my-variable' %}
{%- if meta is defined %}
    {%- if my-variable_key in meta.viewkeys() %}
        {%- set my-variable = meta.get(my-variable_key) %}
    {%- endif %}
{%- endif %}

您现在可以使用my-variable及其值。

请注意,在模板中,meta指的是第二个字段列表; metatags是指由.. meta::构建的标头元标记的docutils生成的HTML。它们是两个不同的对象,具有相同的名称......

答案 1 :(得分:2)

我不确定这确切地回答了您的问题,但是您可以在sphinx配置文件(conf.py)中放置一个名为html_context的字典,该字典允许您定义自定义变量然后在你的html模板中渲染。您可以在此处查看文档:{​​{3}}

在我的应用程序中,我有一个软件发布日期列表,我希望在index.html doc splash页面中呈现。我这样设置:

在releases.py中:

RELEASES = [                                                               
   ( "Jun 05, 2014", "095", "" ),                                                
   ( "May 28, 2014", "094", "" ),                                                
   ( "Apr 29, 2014", "093", "" ),
   ...
]

在conf.py中:

# Get list of releases for index page rendering                            
import releases                                    
html_context = {                                                                 
    'releases' : releases.RELEASES,                                   
}  

在index.html中:

 {%- for release in releases %}                                         
   <p><span class="style4"><em><strong>{{ release[0] }} ... {{ release[1] }} was released ... </p>
 {%- endfor %}