web-dev-qa-db-fra.com

Quel est l’équivalent de "none" dans Django templates?

Je veux voir si un champ/variable est nul dans un modèle Django. Quelle est la syntaxe correcte pour cela?

C'est ce que j'ai actuellement:

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

Dans l'exemple ci-dessus, que pourrais-je utiliser pour remplacer "null"?

76
goelv

None, False and True tous sont disponibles dans les balises et les filtres de modèles. None, False, la chaîne vide ('', "", """""") et les listes/les nuplets vides s’évaluent tous en False lorsqu’ils sont évalués par if, vous pouvez donc le faire facilement.

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

Un indice: @fabiocerqueira a raison, laissez la logique aux modèles, limitez les modèles à être la seule couche de présentation et calculez ce genre de choses dans votre modèle. Un exemple:

# 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 }}

J'espère que cela t'aides :)

107
Gerard

Vous pouvez également utiliser un autre modèle intégré default_if_none

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

Regardez le yesno helper

Par exemple:

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

is opérateur: Nouveauté 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

Vous pouvez également utiliser le filtre de modèle intégré default:

Si la valeur est évaluée à False (par exemple, Aucune, une chaîne vide, 0, False); "-" par défaut est affiché.

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

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

3
Louis

{% if profile.user.first_name %} fonctionne (en supposant que vous ne voulez pas non plus accepter '').

if in Python traite en général None, False, '', [], {}, ... tout comme faux.

3
Dougal

Vous n'avez pas besoin de faire ceci 'if', utilisez: {{ profile.user.get_full_name }}

2
fabiocerqueira