16

我使用Sphinx來記錄將部署在不同服務器上的web服務。該文檔充滿了用戶點擊的URL示例,它們應該可以正常工作。我的問題是主機,端口和部署根目錄會有所不同,並且必須爲每個部署重新生成文檔。reST/Sphinx中的鏈接替換

我試圖定義換人是這樣的:

|base_url|/path 
.. |base_url| replace:: http://localhost:8080 

但生成的HTML是不是我想要的(不包括在生成的鏈接 「/路徑」):

<a href="http://localhost:8080">http://localhost:8080</a>/path 

不有人知道如何解決這個問題嗎?

+0

不知道這是否與此問題有關,但它可能是:http://stackoverflow.com/a/4836544/2988730。 – 2015-11-19 15:52:36

回答

19

新的獅身人面像V1.0:

sphinx.ext.extlinks - 標記來縮短外部鏈接

http://sphinx.pocoo.org/ext/extlinks.html

擴展增加了一個新的配置值:

extlinks

這個配置值必須是外部網站的字典,映射獨特的短別名爲基礎URL和一個前綴。例如,要創建別名爲上面提到的問題,你想補充

extlinks = {'issue': 
    ('http://bitbucket.org/birkenfeld/sphinx/issue/%s', 'issue ')} 

現在,您可以使用別名作爲一個新的角色,例如:issue:`123`。然後插入到http://bitbucket.org/birkenfeld/sphinx/issue/123的鏈接。正如你所看到的,角色中給出的目標被代替%s的基準網址替代。

鏈接標題依賴於第二項元組,前綴:

如果前綴是無,鏈接標題是完整的URL。 如果前綴是空字符串,則鏈接標題是角色內容中給出的部分URL(在這種情況下爲123)。 如果前綴爲非空字符串,則鏈接標題爲部分URL,由前綴 - 在上例中,鏈接標題爲123. 您還可以使用其他生成鏈接的角色支持的常規「顯式標題」語法,即:issue:`this issue <123>`。在這種情況下,前綴不相關。

1

你可以寫一個獅身人面像extension創建一個role

:apilink:`path` 

並從該鏈接。我從來沒有這樣做過,所以我忍不住給了這個指針,抱歉。你應該試着看看各種角色是如何實現的。我想,其中許多與你需要的非常相似。

+0

@thoriann:謝謝你的指針,並檢查我的答案,看看完整的實現。 – 2009-08-05 13:04:12

+0

@馬丁:很酷,我們現在有一個很好的樣本。 – tsg 2009-08-05 13:58:37

4

好的,我是這麼做的。首先,apilinks.py(獅身人面像擴展名):

from docutils import nodes, utils 

def setup(app): 
    def api_link_role(role, rawtext, text, lineno, inliner, options={}, 
         content=[]): 
     ref = app.config.apilinks_base + text 
     node = nodes.reference(rawtext, utils.unescape(ref), refuri=ref, 
           **options) 
     return [node], [] 
    app.add_config_value('apilinks_base', 'http://localhost/', False) 
    app.add_role('apilink', api_link_role) 

現在,在conf.py,加'apilinks'的擴展名列表,併爲'apilinks_base'一個合適的值(否則,它會默認爲'http://localhost/')。我的文件是這樣的:

extensions = ['sphinx.ext.autodoc', 'apilinks'] 
# lots of other stuff 
apilinks_base = 'http://host:88/base/' 

用法:

:apilink:`path` 

輸出:

<a href="http://host:88/base/path">http://host:88/base/path</a>