17 Stimmen

Django-Template-Variablenwert-Vergleich mit Zeichenfolge-Textliteral scheitert

Ich habe den folgenden Code in meiner Vorlage, der den Wert von watchinstance.shift vergleichen soll, der entweder "DAY" oder "NIGHT" sein kann, mit einem Literalstring "DAY". Der Vergleich schlägt immer fehl.

{% for watchinstance in watchinstance_list %}
    {% if watchinstance.shift == "DAY" %}
        Schicht ist TAG
    {% endif %}
{% endfor %}

Auch die Verwendung von ifequal funktioniert nicht:

{% for watchinstance in watchinstance_list %}
    {% ifequal watchinstance.shift "DAY" %}
        Schicht ist TAG
    {% endifequal %}
{% endfor %}

Allerdings funktioniert es, einfach {{ watchinstance.shift }} aufzurufen, wie erwartet:

{% for watchinstance in watchinstance_list %}
    {{ watchinstance.shift }}
{% endfor %}

gibt TAGs und NACHTs zurück.

Ich habe überprüft, ob watchinstance.shift zusätzliche Zeichen zurückgibt, und es scheint nicht der Fall zu sein... Was könnte ich hier noch übersehen?

51voto

Sir Conquer Punkte 673

Also habe ich nach 2 Stunden Suche in den Django-Dokumenten endlich einen Weg gefunden, wie es funktioniert:

{% if watchinstance.shift|stringformat:"s" == "DAY"  %}

1 Stimmen

Ich habe die obige Methode verwendet und bin auf das Problem gestoßen, dass in meinem Fall "=='IP'' nicht von 'item.status=='IP'' analysiert werden konnte. Das Problem stellte sich als fehlende Leerzeichen vor und nach dem "==". Es funktioniert nicht, wenn Sie kein Leerzeichen vor und nach dem "==" haben. Hoffentlich hilft es jemandem.

11voto

Ned Batchelder Punkte 342778

Ein paar Möglichkeiten:

  1. Der .shift-String enthält zusätzliche Leerzeichen. Verwenden Sie dies zur Überprüfung:

    {% for watchinstance in watchinstance_list %}
        X{{ watchinstance.shift }}X
    {% endfor %}
  2. Das .shift-Attribut ist kein String, sondern ein Objekt, das zu "DAY" oder "NIGHT" stringifiziert wird. In diesem Fall würde die Variablensubstitution in {{ watchinstance.shift }} genauso aussehen wie ein String, aber der Vergleich in {% ifequal watchinstance.shift "DAY" %} würde fehlschlagen.

0 Stimmen

1) Ja, das ist die Art und Weise, wie ich ursprünglich auf zusätzliche Zeichen überprüft habe. Es gab keine.

0 Stimmen

2) Ich hatte den Verdacht, dass es damit zu tun hatte! Es handelt sich tatsächlich um einen Fremdschlüsselverweis auf eine Instanz des Shift-Modells! Nach stundenlanger Suche fand ich endlich einen Weg, um es in einen String umzuwandeln!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X