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.
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:
- Jede App hat eine
base_<app_name>.html
Vorlage. Basisvorlagen auf App-Ebene teilen sich ein gemeinsames Elternteil, base.html.- Vorlagen in Apps verwenden eine gemeinsame übergeordnete base_
<app_name>
.html-Vorlage.- Jede Vorlage auf derselben Ebene wie base.html erbt base.html
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
Wahrscheinlich nicht der beste Weg, es zu tun, aber Sie könnten Benutzer include
Ссылка
so etwas wie base_level2.html
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.
Tags und Links django inheritance django-templates