¿Cuál es el equivalente de "ninguno" en las plantillas de django?


102

Quiero ver si un campo / variable no es ninguno dentro de una plantilla de Django. ¿Cuál es la sintaxis correcta para eso?

Esto es lo que tengo actualmente:

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

En el ejemplo anterior, ¿qué usaría para reemplazar "nulo"?

Respuestas:


132

None, False and Truetodos están disponibles en etiquetas de plantilla y filtros. None, False, la cadena vacía ( '', "", """""") y las listas / tuplas vacías se evalúan Falsecuando son evaluadas por if, por lo que puede hacer fácilmente

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

Una pista: @fabiocerqueira tiene razón, deja la lógica a los modelos, limita las plantillas para que sean la única capa de presentación y calcula cosas así en tu modelo. Un ejemplo:

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

Espero que esto ayude :)


Intenté pasar None como parámetro a la etiqueta {% cache%} y descubrí que no está disponible. Ocupado trabajando en esto.
tobych

7
{% if profile.user.first_name is None %}provoca un error de sintaxis en la plantilla de Django.
Rockallite

1
Su sugerencia mezcla la presentación y la lógica al poner HTML en su modelo, haciendo exactamente lo contrario de lo que está tratando de enseñar. ¿Qué tal devolver Ninguno si no hay un nombre (comportamiento lógico para un modelo de datos) y luego usar el default_if_nonefiltro en la plantilla?
jbg

@ JasperBryant-Greene, ¡tienes razón! recién actualizado. ¡Buen partido, hombre! ¡Gracias!
Gerard

67

También puede utilizar otra plantilla incorporada default_if_none

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

1
¿Alguna idea de cómo usar esto con otros filtros como la fecha? Por ejemplo, ¿es posible mostrar "N / A" si una fecha no es ninguna pero de lo contrario formatee? Me gusta: {{post.pub_date | default_if_none: "N / A" | fecha: "Ymd"}}?
Andreas Bergström

@ AndreasBergström En su caso, solicite dateprimero. Si ocurre algún error, devolverá Ninguno. Entonces aplica default_if_none.
defance el

¿Qué versión de Django se trajo?
Usuario

10

isoperador: Nuevo en Django 1.10

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


4

{% if profile.user.first_name %}funciona (suponiendo que tampoco quieras aceptar '').

ifen Python en golosinas generales None, False, '', [], {}, ... todo como falso.



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.