Django Vorlagenvererbung: Wie viele Ebenen und welche Seite zu rendern

8

Ich hätte gerne einen Ratschlag beim Erstellen von Django-Template-Levels.

Beim Lesen der Dokumente verstehe ich nicht, wie man eine Template-Hierarchiestruktur mit mehr als zwei Ebenen erstellt.

Ich möchte zum Beispiel 3 Vererbungsebenen erstellen:

%Vor%

Das ist mein Code:

  • base.html

    %Vor%
  • base_level2.html

    %Vor%
  • level2_level3_1.html

    %Vor%
  • level2_level3_2.html

    %Vor%
  • views.py:

    %Vor%

Auf diese Weise kann ich Folgendes in meinem Browser sehen:

%Vor%

Und das ist logisch für mich, weil ich render_to response nur auf level2_level3_1.html anrufe.

Natürlich, wenn Aufruf level2_level3_2.html, bekomme ich die Nachricht Third level, part 2 , aber nicht die Third level, part1 .

Wie löst man das? Ist das ein guter Ansatz? Ich habe Sachen auf diese Weise strukturiert, weil meine echten Vorlagen sehr groß sind, viele Zeilen Code, also würde ich gerne etwas Ordnung behalten. Jeder Rat wird geschätzt.

    
caneta 03.06.2013, 15:06
quelle

2 Antworten

6

Es ist schwer zu sagen, ob es eine gute oder eine schlechte Idee ist oder nicht, ohne die spezifische Funktionalität Ihrer Vorlagen zu kennen, aber meine unmittelbare Reaktion ist, dass Sie versuchen, Ihre Vorlagen zu organisieren. Ich denke, die meisten Leute würden Sie von mehr als einem 3-Tier-System abhalten, weil es es schwieriger macht, kleine Änderungen an der Website vorzunehmen und schwieriger zu verfolgen, wo die Dinge liegen. aus dem Zen von Python:

  

Flach ist besser als verschachtelt

Die Empfehlung für ein 3-Tier-System in Zwei Schaufeln von Django lautet so:

  
  1. Jede App hat eine base_<app_name>.html Vorlage. Basisvorlagen auf App-Ebene teilen sich ein gemeinsames Elternteil, base.html.
  2.   
  3. Vorlagen in Apps verwenden eine gemeinsame übergeordnete base_ <app_name> .html-Vorlage.
  4.   
  5. Jede Vorlage auf derselben Ebene wie base.html erbt base.html
  6.   

und für Ihr Namensschema könnte es so aussehen:

%Vor%

EDIT: und es gibt keinen wirklichen Grund dafür:

%Vor%

wobei sich jeder Block auf den Inhalt einer Vorlage bezieht. Sie können das auf einen Block wie

vereinfachen %Vor%

und benenne dann die Blöcke in jeder Level3-Vorlage entsprechend

    
skzryzg 03.06.2013 15:55
quelle
3

Wahrscheinlich nicht der beste Weg, es zu tun, aber Sie könnten Benutzer include Ссылка

so etwas wie base_level2.html

%Vor%

Ich habe das nicht getestet, also nicht sicher, ob es funktioniert.

und btw:

  

Das Include-Tag sollte als eine Implementierung von "rendere dieses Subtemplate und beinhalte das HTML" betrachtet werden, nicht als "parse dieses Subtemplate und lege seinen Inhalt so dar, als ob es Teil des Elternteils wäre". Dies bedeutet, dass es keinen gemeinsamen Status zwischen den enthaltenen Vorlagen gibt - jedes Include ist ein vollständig unabhängiger Renderprozess.

    
EsseTi 04.06.2013 08:16
quelle