2012-11-03 41 views
8

我正在使用斯芬克斯實現文檔(https://github.com/fridge-project/dbal-docs)&想要覆蓋特定文檔的html頁面。我的興趣是覆蓋所有目錄索引,不僅顯示一個簡單的ul。替代特定斯芬克斯文檔的html頁面模板

我已閱讀獅身人面像文件,但我沒有發現有關我的問題有趣...有人知道一個解決方法嗎?

+0

你有沒有最終找到解決方案? –

+0

是的,我找到了一個解決方案,但它真的聽起來像一個黑客... 我已經覆蓋'page.html'模板&根據'pagename'然後'include'自定義模板而不是真正的... – egeloen

+0

你能在這裏粘貼解決方案嗎?即使它只是一個黑客,也會有所幫助。 –

回答

10

根據記錄,該解決方案是遠遠超過溶液中的技巧,但現在,我沒有找到更好的......

首先,所有你需要了解我的解決方法是基於主題化。在你的文檔中,你使用了一個主題(默認的或自定義的主題),但無論如何,你都使用主題。這個主題分爲不同的部分(頁面,toc,...),可以單獨覆蓋。此覆蓋可以在不同級別完成:主題本身或項目的自定義模板目錄(默認爲_templates)(可在conf.py中配置)。

我的解決方法是覆蓋_templates目錄中的page.html模板,該目錄代表文檔中的所有頁面。在此模板中,您可以訪問pagename(每個文件的相對文檔路徑)。知道這一點,你可以在這個模板中進行一些有條件的檢查,以檢測這是否是一個你想覆蓋的文件,然後覆蓋它。如果它不是需要重寫文件,只需回退到上的默認行爲:

{% extends "layout.html" %} 
{% block body %} 
    {% if pagename == 'index' %} 
     {% include 'custom/index.html' %} 
    {% else %} 
     {{ body }} 
    {% endif %} 
{% endblock %} 

作爲解釋,聽起來真是一個黑客...

0

每個人都應該能夠使用一個變量定義要擴展的模板。 http://jinja.pocoo.org/docs/2.10/templates/#template-objects

以這種方式,它可能不是'黑客'。並且您可以完全控制生成的輸出(不僅是body塊)。

的layout.html:
{% extends meta.page_template|default('basic/page.html') %}

而在你index.rst你用那麼頁面級的元數據: http://www.sphinx-doc.org/en/stable/markup/misc.html#file-wide-metadata

index.rst:
:page_template: custom/index.html <your normal index.rst content>