2012-11-03 26 views
8

Wdrażam dokumentację przy użyciu Sphinx (https://github.com/fridge-project/dbal-docs) & chciałbym zastąpić stronę HTML określonego dokumentu. Moim zainteresowaniem jest nadpisanie wszystkich indeksów katalogów, aby nie tylko pokazywały prostą ul.Zastępowanie szablonu strony html dla określonego dokumentu sfinksa

Przeczytałem dokumentację Sphinx, ale nie znalazłem nic ciekawego w moim wydaniu ... Czy ktoś zna obejście?

+0

Czy ty ewentualnie znaleźć rozwiązanie? –

+0

Tak, znalazłem rozwiązanie, ale to naprawdę brzmi jak włamanie ... Przesłoniłem szablon 'page.html' i wykonałem test warunkowy zgodnie z szablonem' pagename' & then 'include' zamiast z prawdziwy ... – egeloen

+0

Czy możesz tu wkleić to rozwiązanie? Byłoby pomocne, nawet jeśli to tylko hack. –

Odpowiedz

10

Dla przypomnienia, jest to rozwiązanie znacznie bardziej hack niż rozwiązanie ale teraz nie znajdę czegoś lepszego ...

pierwsze, wszystkim trzeba zrozumieć mojego obejścia jest oparty na motywy. W dokumencie używasz motywu (domyślnego lub niestandardowego), ale w każdym razie używasz motywu. Ten motyw jest podzielony na różne części (strona, toc, ...), które można indywidualnie przesłonić. To przesłonięcie może być wykonane na innym poziomie: sam motyw lub w niestandardowym katalogu szablonu projektu (domyślnie _templates) (konfigurowalny w conf.py).

Moje obejście polega na zastąpieniu szablonu page.html w katalogu _templates, który reprezentuje wszystkie strony w dokumentacji. W tym szablonie masz dostęp do pagename (względna ścieżka do dokumentu dla każdego pliku). Wiedząc o tym, możesz wykonać warunkowe sprawdzenie w tym szablonie, aby wykryć, czy jest to plik, który chcesz zastąpić &, a następnie go przesłonić. Jeśli nie jest to plik, który musi być nadpisane, po prostu awaryjne na zachowanie domyślne:

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

Jak wyjaśnić, to naprawdę brzmi jak hack ...

0

Jeden powinien być w stanie użyć zmiennej zdefiniować szablon, z którego można rozciągać. http://jinja.pocoo.org/docs/2.10/templates/#template-objects

W ten sposób może być mniej "hack". I masz pełną kontrolę nad wygenerowanym wyjściem (nie tylko blokiem body).

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

I w index.rst użyć wtedy strona-level-meta-dane: 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>

Powiązane problemy