Seite 1 von 1

Strings verknüpfen in Django template Sprache

Verfasst: Dienstag 7. Oktober 2008, 13:57
von lunas
Hallo,

kann mir jemand sagen, ob es möglich ist innerhalb eines Django templates zwei strings zusammenzufügen und das Ergebnis dann mittels {% ifequal a b%} zu vergleichen (wobei b der zusammengesetzte string sein soll)?

Danke,
lunas

PS: Achja, wenn es möglich ist, dann wäre auch die Angabe eines kleinen Beispiels hilfreich...

Re: Strings verknüpfen in Django template Sprache

Verfasst: Dienstag 7. Oktober 2008, 14:40
von .robert
lunas hat geschrieben:PS: Achja, wenn es möglich ist, dann wäre auch die Angabe eines kleinen Beispiels hilfreich...
Hi,

vielleicht wäre eine kleines Beispiel deinerseits ganz hilfreich, ich verstehe dein Problem nicht wirklich.

Ich sehe es grade so, das du eine Variable mit einer anderen Variablen vergleichen willst, oder eine Variable mit einem festen String.
Im ersten Fall könntest du ja einfach eine weitere Variable mit übergeben, die den zusammen gesetzten String enthält, im zweiten Fall wäre die Frage überflüssig.

Also, ich habe das Gefühl das ich dich nicht ganz verstanden habe, und bitte um Erläuterung...

Verfasst: Dienstag 7. Oktober 2008, 15:00
von Leonidas
Nein, du kannst in den Templates keine Variablen wie ``b`` setzen. Soetwas ist auch eher Teil der Logik und nicht der Darstellung und hat im Template wenig zu suchen.

Verfasst: Dienstag 7. Oktober 2008, 15:03
von lunas
Ich möchte eine Variable, die ich übergebe, mit zwei anderen übergebenen Variablen (dem zusammengesetzten String) vergleichen. Natürlich gibt es eine Lösung, bei der ich noch mehr übergebe, das möchte ich aber vermeiden.

Verfasst: Dienstag 7. Oktober 2008, 15:07
von lunas
Leonidas hat geschrieben:Nein, du kannst in den Templates keine Variablen wie ``b`` setzen. Soetwas ist auch eher Teil der Logik und nicht der Darstellung und hat im Template wenig zu suchen.
Naja, das ist Ansichtssache. Übergibt man nun lieber die Rohdaten und lässt das Template sich um die Präsentation kümmern oder bereitet man schon alles in der Logik vor und nutzt das Templatesystem nur zur stupiden Substitution der Variablen... Ich präferiere da den ersten Weg (was der ein oder andere ja durchaus anders sehen kann und wird).

Verfasst: Dienstag 7. Oktober 2008, 15:09
von lunas
Trotzdem danke. Dann muss ich mir wohl etwas anderes überlegen.

Lg,
lunas

Verfasst: Dienstag 7. Oktober 2008, 15:10
von Leonidas
Du kannst dir ja ein ifequal-Tag schreiben, dass drei Argumente nimmt und die letzten beiden Verkettet und dann mit dem ersten vergleich.

Bin ich froh, dass ich das Ding hinter mir gelassen habe :)

Verfasst: Dienstag 7. Oktober 2008, 17:13
von sma
lunas hat geschrieben:Trotzdem danke. Dann muss ich mir wohl etwas anderes überlegen.
Warum kannst du in der View-Funktion nicht einfach eine weitere Variable mit dem auszurechnenden Ausdruck anlegen und dem Template übergeben?

Alternativ musst du dir ein eigenes Template-Tag (wie schon andere vorgeschlagen haben) bauen, was aber IMHO bei Django unnötig schwer ist oder eine Filter-Funktion bauen, mit der du dann etwas wie a|plus:b ausdrücken kannst. Schließlich könntest du noch ein anderes Template-Rahmenwerk benutzen. Jinja2 ist sehr ähnlich zu Djangos Templates und erlaubt "echte" if-Statements. Alternative hierzu wäre Mako, welches auch der Philosophie folgt, dem Benutzer alle Möglichkeiten von Python zu ermöglichen und ihn nicht in einer Sandbox einschließt. Die Template-Engine ist noch das, was sich bei Django am einfachsten austauschen lässt.

Stefan