web-dev-qa-db-de.com

Was ist das Äquivalent von "none" in Django Vorlagen?

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

Das habe ich aktuell:

{% 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?

76
goelv

None, False and True Alle sind in Vorlagen-Tags und Filtern verfügbar. None, False, die leere Zeichenfolge ('', "", """""") und leere Listen/Tupel werden alle zu False ausgewertet, wenn sie von if ausgewertet werden

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

Ein Tipp: @fabiocerqueira ist richtig, überlassen Sie die Logik den Modellen, beschränken Sie die 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 :)

107
Gerard

Sie können auch eine andere integrierte Vorlage verwenden default_if_none

{{ profile.user.first_name|default_if_none:"--" }}
43
Babacar Gningue

Schauen Sie sich den yesno Helfer an

Z.B:

{{ myValue|yesno:"itwasTrue,itWasFalse,itWasNone" }}
4
mwjackson

is operator: 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
user6763622

Sie können auch den integrierten Vorlagenfilter default verwenden:

Wenn der Wert False ergibt (z. B. None, eine leere Zeichenfolge, 0, False); Die Standardeinstellung "-" wird angezeigt.

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

Dokumentation: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#default

3
Louis

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

if in Python im Allgemeinen behandelt None, False, '', [], {}, ... alles als falsch.

3
Dougal

Sie müssen dies nicht tun, wenn, verwenden Sie: {{ profile.user.get_full_name }}

2
fabiocerqueira