{% include xxx %} aus eine zweiten app

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 1053
Registriert: Sonntag 19. September 2021, 09:40

Ich arbeite an einer Option, die Routinen zur Aufgabenerstellung aus meinem Rechentrainer auch in einem Rechenduell zu nutzen.
Das Template in dem die Aufgaben jeweils angezeigt werden muss ich dazu etwas ändern.
In dem Template it dem die Aufgabenstellung angezeigt wird, werden bei speziellen Aufgaben andere Templates eingefügt. Wenn Grafiken oder Wertetabellen angezeigt werden müssen, werden diese aus dem jeweiligen view über verschiedene Benennungen mittels {{ parameter.name }} übergeben:

Code: Alles auswählen

{% if parameter.name != "normal" and not "tab" in parameter.name %}
    {% include {{parameter.name}} %} 
{% endif %}
Für das geplante Duell habe ich eine eigene App "onlineduell" in mein Projekt eingefügt und dort das geänderte Template für die Anzeige der Aufgaben eingefügt.
Da ich die beschriebenen Einfügungen nicht ändern muss, liegen sie weiterhin in der App "core". Ich möchte diese html Dateien mit den Einfügungen nicht in die app "onlineduell" kopieren, sondern sie aus der app "core" einfügen - das gelingt mir nicht. Geht das nicht?
Benutzeravatar
noisefloor
User
Beiträge: 4187
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ja, geht. Steht auch explizit in der Doku:
The template name can either be a variable or a hard-coded (quoted) string, in either single or double quotes.
In der Doku steht auch die korrekte Syntax: der variable Name darf _nicht_ in doppelt geschweiften Klammer stehen. Wenn du das Template aus einer anderen App einbindest muss du den Namespace beachten (davon ausgehen, dass du Namespaces für Apps nutzt).

Gruß, noisefloor
Pitwheazle
User
Beiträge: 1053
Registriert: Sonntag 19. September 2021, 09:40

Dank dafür. Entschuldig, ich hätte natürlich auch hier wieder in die Dokumentation schauen sollen ...
Aber wieder mal: Zwischen Dokumntation lesen und verstehen und anwenden ist wieder mal ein Problem. Wie kann ich hier die Doppelklammer weglassen? Ich habe es probiert - ich bekomme es nicht hin. Es wäre schön, wenn du mir da auf die Sprünge helfen könntest.
Her ist meine Ordnerstruktur:

Code: Alles auswählen

├───core
│   ├───templates
│   │   ├───core
│   │   │       aufgabe.html
│   │   │       grafik.html
│   │   │       optionen.html
│   │   │       protokoll.html
│   │   │       wertetabelle.html
│   │   └───svg
│   │           dreiecke.svg
│   │           geometrie.svg
│   │           koosys.svg
│   │           kreise.svg
│   │           parallele.svg
│   │           stochastik.svg
│   │           winkel.svg
│   │           zahlenstrahl.svg
├───onlineduell
│   ├───templates
│   │   └───onlineduell
│   │           aufgabe.html
│   │           index.html
│   │           kategorien.html
Normalerweise nutze ich mein Template für die Aufgaben im Ordner core->templates->core->"aufgabe.html" und die includes liegen auch in diesem Ordner oder auch im Ordner svg.
Diese Einfügungen übergebe ich, wie beschrieben, mittels "parameter.name" und das sieht z.B. so aus "parameter = {'name': 'svg/koosys.svg', ...}.
Wenn ich das aus meiner App "onlineduell" einfüge, müsste also "core/templates/" vorangestllt werden. Wie mache ich das ohne Doppelklammer?
Ich glaube schon, dass ich namespace benutze (das ist doch das "... name = ... " in den url Pfaden?). Ich sehe aber hier nicht den Zusammenhang.
Danke für die Mühe
Sirius3
User
Beiträge: 18261
Registriert: Sonntag 21. Oktober 2012, 17:20

Klammern weglassen, ist ganz einfach, man drückt einfach die entsprechende Taste nicht, in Deinem Fall sind das sogar zwei Tasten, die man zusammen nicht drückt, obwohl ein `alt gr` alleine schadet auch nicht.

Code: Alles auswählen

{% include parameter.name %}
Ansonsten, wenn Du einen Fehler erhältst, immer den aktuellen Code samt Fehler posten.
Pitwheazle
User
Beiträge: 1053
Registriert: Sonntag 19. September 2021, 09:40

OK. Das heißt, django findet die includes auch in anderen Apps.
Benutzeravatar
noisefloor
User
Beiträge: 4187
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Ja, genau. Wenn du in der `onlineduell` App z.B. "grafik.html" aus `core` nutzen willst, dann sollte das mit `{% include 'core/grafik.html' %}` funktionieren. Bzw.in deinem Beispiel müsste `parameter.name` den Wert `core/grafik.html' haben.

Gruß, noisefloor
Antworten