2012-06-02 5 views
16

YoDziedziczenie wielu szablonów django - czy jest to właściwy styl?

więc mam base.html:

<html> 
    <body> 
     <div id="header"> ... </div> 
     {% block main %}{% endblock %} 
     <div id="footer"> ... </div> 
    </body> 
</html> 

i mam również stronę przedstawiającą posty użytkownika:

{% extends base.html %| 
{% block main%} 
    <h1>welcome to yours posts hangout!</h1> 

     ... snazzy code here that shows all the posts ... 

{% endblock%} 

teraz jest problem, może mam inny strona taka jak ta:

{% extends base.html %| 
{% block main%} 
    <h1>look at all posts by all users!</h1> 

     ... snazzy code here that shows all the posts by all the users ... 

{% endblock%} 

ponieważ wszyscy należymy do mensa, widzimy to snazzy kod, który mam, jest powtarzany - dwa razy (dla tautologicznej zabawy!)

Nie chcę powtarzać tego kodu - mam na myśli, jeśli to będzie poważny problem, ale w przeciwnym razie tak jak na jednej stronie, która ma zdefiniowany kod, a następnie wsuń małe zmiany powyżej i (ewentualnie) poniżej.

Moje zrozumienie szablonów jest jednak niepewne - myślę, że jest to sposób na zrobienie tego, czy istnieje lepszy/znormalizowany sposób?

snazzy.html:

{% extends base.html %| 
    {% block aboveSnazzy%} 
    {% endblock %} 

     ... snazzy code here that shows all the posts by all the users ... 

    {% block belowSnazzy%} 
    {% endblock %} 
{% endblock%} 

a następnie dla każdego z różnych kawałków, mogę mieć:

usersArea.html:

{% extends snazzy.html %| 
    {% block aboveSnazzy%} 
     <h1>welcome to yours posts hangout!</h1> 
    {% endblock %} 


    {% block belowSnazzy%} 
     <h1>i didn't think this far ahead in the example</h1> 
    {% endblock %} 
{% endblock%} 

etc etc dla innych kawałków zbyt !

ok, więc wiem, że mogę po prostu wysłać parametr z innym nagłówkiem lub co ty - udawajmy, że powyższy fragment Snazzy to, nie wiem, pokazujący jakiś inny szablon, który chciałbym lub zrobiłbym coś nietrywialny. Czy to, co opisałem powyżej "sposób" to zrobić?

Pozdrawiam!

Odpowiedz

19

Yo. :-)

Odpowiedź zależy od tego, ile mają wspólne szablony.

  • jeśli szablony mają wiele wspólnego, na przykład są strony jakiejś części swojej stronie, albo po prostu bardzo często strucure, sposób opisany jest najlepszy. Zrób kolejny szablon bazowy, dodaj więcej bloków i dziedzicz go. Właśnie, że należy korzystać z niektórych bardziej opisowych nazw dla bloku, na przykład

    {% extends base.html %| 
    {% block page_heading %}{% endblock %} 
        ... snazzy code here that shows all the posts by all the users ... 
    {% block extra_content %}{% endblock %} 
    
  • jeśli szablony nie ma papkę wspólnego, ale akcja jakiś specyficzny blok zawartości, to inna sytuacja. Trudno tutaj zbudować odpowiednią strukturę dziedziczenia. Możesz więc użyć tutaj: {% include %}: Na przykład utwórz kolejny szablon, który pokazuje posty (snazzy kod wyświetlający wszystkie posty), na przykład _list_posts.html. Możesz utworzyć kolejny szablon, który wyświetla posty (snazzy kod pokazujący wszystkie posty), na przykład _list_posts.html. Następnie użyj go w szablonach dzieci.

    {% extends base.html %| 
    {% block main%} 
    <h1>welcome to yours posts hangout!</h1> 
    {% include '_list_posts.html' %} 
    {% endblock%} 
    

    Do tego można również użyć inclusion tag.

Który sposób wybrać? Spróbuj odpowiedzieć na pytanie: czy te dwa szablony mogą (i powinny) mieć wspólnego przodka? Jeśli tak, przejdź do pierwszej odmiany, jeśli nie - na drugą.

+0

Thankyo! Nie wiedziałem o znacznikach włączenia/włączenia. Popatrzę na nich! – bharal