Qual é o equivalente a “nenhum” nos modelos django?


102

Eu quero ver se um campo / variável não é nenhum dentro de um modelo Django. Qual é a sintaxe correta para isso?

Isso é o que eu tenho atualmente:

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

No exemplo acima, o que eu usaria para substituir "nulo"?

Respostas:


132

None, False and Truetodos estão disponíveis em tags e filtros de modelo. None, False, a string vazia ( '', "", """""") e as listas / tuplas vazias são avaliadas Falsequando avaliadas por if, então você pode fazer facilmente

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

Uma dica: @fabiocerqueira tem razão, deixe a lógica para os modelos, limite os templates para serem a única camada de apresentação e calcule coisas assim no seu modelo. Um exemplo:

# 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 isto ajude :)


Acabei de tentar passar None como parâmetro para a tag {% cache%} e descobri que não está disponível. Ocupado trabalhando nisso.
tobych

7
{% if profile.user.first_name is None %}causa erro de sintaxe no template do Django.
Rockallite

1
Sua dica mistura apresentação e lógica ao colocar HTML em seu modelo, fazendo exatamente o oposto do que você está tentando ensinar. Que tal retornar None se não houver nome (comportamento lógico para um modelo de dados) e, em seguida, usar o default_if_nonefiltro no modelo?
jbg

@ JasperBryant-Greene você está certo! apenas atualizado. Boa pegada, cara! THX!
Gerard

67

Você também pode usar outro modelo integrado default_if_none

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

1
Alguma ideia de como usar isso com outros filtros, como data? Por exemplo, é possível exibir "N / A" se uma data for nenhuma, mas, caso contrário, formatá-la? Como: {{post.pub_date | default_if_none: "N / A" | data: "Ymd"}}?
Andreas Bergström

@ AndreasBergström No seu caso, você se inscreve dateprimeiro. Se ocorrer algum erro, ele retornará Nenhum. Então você aplica default_if_none.
defance

Qual versão do Django foi trazida?
Usuário em

10

isoperador: Novo no Django 1.10

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

5

Olhe para o ajudante yesno

Por exemplo:

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

4

{% if profile.user.first_name %}funciona (supondo que você também não queira aceitar '').

ifem Python em guloseimas gerais None, False, '', [], {}, ... tudo como falsa.



0

Você pode tentar isto:

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

Dessa forma, você está essencialmente verificando se o campo do formulário first_nametem algum valor associado a ele. Veja {{ field.value }}em Loop sobre os campos do formulário na Documentação do Django .

Estou usando Django 3.0.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.