Strings verknüpfen in Django template Sprache

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Dienstag 7. Oktober 2008, 13:57

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...
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Dienstag 7. Oktober 2008, 14:40

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...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 7. Oktober 2008, 15:00

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Dienstag 7. Oktober 2008, 15:03

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.
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Dienstag 7. Oktober 2008, 15:07

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).
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Dienstag 7. Oktober 2008, 15:09

Trotzdem danke. Dann muss ich mir wohl etwas anderes überlegen.

Lg,
lunas
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 7. Oktober 2008, 15:10

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 :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Dienstag 7. Oktober 2008, 17:13

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
Antworten