3

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

.. :newVariable: My Text

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

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

4

2 回答 2

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指的是 docutils 为标头元标记生成的 HTML,从.. meta::. 它们是两个不同的对象,具有相同的名称...

于 2014-11-01T18:07:39.410 回答
2

我不确定这是否能准确回答您的问题,但是html_context您可以在 sphinx 配置文件 (conf.py) 中放置一个名为的字典,它允许您定义自定义变量,然后您可以在 html 模板中呈现这些变量。您可以在此处查看文档:http: //sphinx-doc.org/config.html#confval-html_context

在我的应用程序中,我有一个软件发布日期列表,我想在我的 index.html 文档启动页面中呈现这些日期。我是这样设置的:

在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 %}    
于 2014-06-29T23:09:45.373 回答