2012-03-14 79 views
4

[我拆了原來的問題分成兩個更多的測試和研究後]如何在conf.py中設置sphinx的自定義配置值? (例如,用於sphinx.ext.ifconfig)

我定義的conf.py我自己的配置值,並寫了一個最小的擴展,使其從可見第一個文件。

sys.path.insert(0, os.path.abspath('.')) 
extensions = ['sphinx.ext.ifconfig', 'myExt'] 
testlevel = 2 

在本地myExt.py:

在conf.py

def setup(app): 
    app.add_config_value('testlevel', '', True) 

這只是正常; test.rst包括:

.. ifconfig:: testlevel == 2 

    Hurray, it seems to work 

sphinx.ext.ifconfig的文檔,似乎可以直接從conf.py致電* app.add_config_value *。誰能告訴我如何做到這一點?

回答

2

兩件事情,這裏要注意:

  1. 首先,conf.py文件僅僅是一個Python文件。唯一特別的是Sphinx特別尋找並導入它。你可以在這個文件中做任何事情,你可以在普通的python文件中做。
  2. 二,conf.py檔案can itself be an extension。換句話說,它可以有一個setup函數,它應該和擴展中的函數一樣。因此,如果您將擴展名(myExt.py)的內容複製到conf.py文件中,則該文件應該正常工作(tm)。
+0

非常感謝,凱文。我以爲我第一次嘗試把設置功能放入conf.py,但這似乎不起作用。我是否還必須聲明擴展= [...,'conf']? – 2012-03-26 07:53:29

+0

我不這麼認爲。至少我不記得曾經這樣做過,而且這些文檔似乎表明,只需在conf.py中放置一個設置函數就可以了。 – 2012-03-30 23:29:25

+0

編譯和評估conf.py,而不是像擴展名列表中提供的那樣編譯和處理__import __'。那沒問題。但conf.py定義被醃漬,並且因爲它不是一個合適的模塊,像class mynode(nodes.Inline, nodes.Element):pass這樣的定義會導致PicklingError:不能pickle:它不會被找到...... – 2013-10-25 22:28:09

相關問題