Was ist das Äquivalent von "keine" in Django-Vorlagen?


101

Ich möchte sehen, ob ein Feld / eine Variable in einer Django-Vorlage keines ist. Was ist die richtige Syntax dafür?

Folgendes habe ich derzeit:

{% if profile.user.first_name is null %}
  <p> -- </p>
{% elif %}
  {{ profile.user.first_name }} {{ profile.user.last_name }}
{% endif%}

Was würde ich im obigen Beispiel verwenden, um "null" zu ersetzen?

Antworten:


131

None, False and TrueAlle sind in Vorlagen-Tags und Filtern verfügbar. None, False, die leere Zeichenfolge ( '', "", """""") und leere Listen / Tupel werden alle ausgewertet, Falsewenn sie von ausgewertet werden if, sodass Sie dies problemlos tun können

{% if profile.user.first_name == None %}
{% if not profile.user.first_name %}

Ein Hinweis: @fabiocerqueira ist richtig, überlassen Sie die Logik den Modellen, beschränken Sie Vorlagen auf die einzige Präsentationsebene und berechnen Sie solche Dinge in Ihrem Modell. Ein Beispiel:

# someapp/models.py
class UserProfile(models.Model):
    user = models.OneToOneField('auth.User')
    # other fields

    def get_full_name(self):
        if not self.user.first_name:
            return
        return ' '.join([self.user.first_name, self.user.last_name])

# template
{{ user.get_profile.get_full_name }}

Hoffe das hilft :)


Ich habe gerade versucht, None als Parameter an das Tag {% cache%} zu übergeben und festgestellt, dass es nicht verfügbar ist. Beschäftigt damit.
Tobych

7
{% if profile.user.first_name is None %}verursacht Syntaxfehler in der Django-Vorlage.
Rockallite

1
Ihr Hinweis mischt Präsentation und Logik, indem Sie HTML in Ihr Modell einfügen und genau das Gegenteil von dem tun, was Sie vermitteln möchten. Wie wäre es, wenn Sie None zurückgeben, wenn kein Name vorhanden ist (logisches Verhalten für ein Datenmodell), und dann den default_if_noneFilter in der Vorlage verwenden?
jbg

@ JasperBryant-Greene du hast recht! gerade aktualisiert. Guter Fangmann! Vielen Dank!
Gerard

66

Sie können auch eine andere integrierte Vorlage verwenden default_if_none

{{ profile.user.first_name|default_if_none:"--" }}

1
Irgendeine Idee, wie man dies mit anderen Filtern wie Datum verwendet? Ist es beispielsweise möglich, "N / A" anzuzeigen, wenn ein Datum keines ist, es aber anderweitig formatiert? Wie: {{post.pub_date | default_if_none: "N / A" | Datum: "Ymd"}}?
Andreas Bergström

@ AndreasBergström In deinem Fall bewirbst du dich datezuerst. Wenn ein Fehler auftritt, wird None zurückgegeben. Dann bewerben Sie sich default_if_none.
Defance

Welche Version von Django wurde eingeführt?
Benutzer

10

isBetreiber: Neu in Django 1.10

{% if somevar is None %}
  This appears if somevar is None, or if somevar is not found in the context.
{% endif %}


3

{% if profile.user.first_name %}funktioniert (vorausgesetzt, Sie möchten auch nicht akzeptieren '').

ifin Python im Allgemeinen behandelt None, False, '', [], {}, ... alle als falsch.



0

Sie könnten dies versuchen:

{% if not profile.user.first_name.value %}
  <p> -- </p>
{% else %}
  {{ profile.user.first_name }} {{ profile.user.last_name }}
{% endif %}

Auf diese Weise überprüfen Sie im Wesentlichen, ob dem Formularfeld first_nameein Wert zugeordnet ist. Siehe {{ field.value }}in Looping über die Felder des Formulars in Django Dokumentation .

Ich benutze Django 3.0.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.