Variables 在Sphinx模板中获取变量

Variables 在Sphinx模板中获取变量,variables,templates,jinja2,python-sphinx,Variables,Templates,Jinja2,Python Sphinx,我不知道如何通过模板将变量导入Sphinx文档。我肯定犯了一个基本的错误,但尽管有很多文档介绍如何使用Jinja/Flask模板进行web服务,还有一些文档介绍如何使用Jinja/Flask模板,但我在执行以下操作时遇到了困难。也许这是不可能的,我找错了方向,但这与web模板中变量的工作方式(相对于文档模板)有很大不同 我在一个更大的项目中工作。假设我在项目的conf.py中创建了一个变量,比如 LANGS = ['en', 'de', 'cn'] 我知道这是可行的,因为如果我用conf.py

我不知道如何通过模板将变量导入Sphinx文档。我肯定犯了一个基本的错误,但尽管有很多文档介绍如何使用Jinja/Flask模板进行web服务,还有一些文档介绍如何使用Jinja/Flask模板,但我在执行以下操作时遇到了困难。也许这是不可能的,我找错了方向,但这与web模板中变量的工作方式(相对于文档模板)有很大不同

我在一个更大的项目中工作。假设我在项目的
conf.py
中创建了一个变量,比如

LANGS = ['en', 'de', 'cn']
我知道这是可行的,因为如果我用
conf.py

print len(LANGS)
它在docbuild期间显示

但是现在我当然想在我的模板中访问这个变量。据我所知,我们用
模板/index.html
覆盖
index.rst
,它继承了Sphinx的basic layout.html。如果我这样做了

<p>We have {{ LANGS|len }} languages</p>
我们有{{LANGS | len}}种语言

我明白了

我们有0种语言

现在,这很奇怪,因为有时我会引用未定义的变量(尽管不一致),从而在构建中导致错误,因此它“知道”变量已定义,但认为它的长度为零。还是“null”变量的长度自动为零

如何定义此变量?还是不可能?

我想做的是为列表中的每种语言做一些事情(特别是做一个外部链接),但是我认为如果我不能让它工作,那么尝试
{%for%}/{%endfor%}
或者其他任何方法都没有意义。也许斯芬克斯只实现了Jinja的一个子集


无论如何,请帮忙

向模板传递变量至少有两种方法:

<p>We have {{ theme_num_langs }} languages</p>
  • 通过:

    要传递到所有页面的模板引擎上下文中的值字典。也可以使用sphinxbuild的-A命令行选项将单个值放入该字典中

    例如:

    # conf.py:
    html_context = {'num_langs': len(LANGS)}
    
    <!-- template: -->
    <p>We have {{ num_langs }} languages</p>
    
    然后,您可以通过
    html\u主题选项在
    conf.py
    中设置
    num\u langs

    html_theme_options = {'num_langs': len(LANGS)}
    
    并在模板中使用它:

    <p>We have {{ theme_num_langs }} languages</p>
    
    我们有{{theme_num_langs}}种语言


  • 可能相关:哇,necro回答!谢谢我不得不承认,我几乎忘记了最初的背景,已经离开了那个特定的项目。我会等到你的赏金到期后再接受你的赏金,不过,万一真的有不同的方法来做,因为不必创建“主题”会很好,因为我对“主题”的了解甚至比一般的斯芬克斯还要少。@kcrisman是的,我宁愿不自己创建主题,因此,bounty.找到了通过html_context.Perfect传递变量的更好方法!我很确定这是“规范”的方式,所以我会接受,即使我现在不能测试它。非常感谢。你如何发现斯芬克斯的变数?例如,在“localtoc.html”中,我可以直接编写
    {{toc}}
    ,这很好。但是,这个
    toc
    变量来自哪里?我怎样才能找到其他人?