django 템플릿에서 "none"에 해당하는 것은 무엇입니까?


103

Django 템플릿 내에서 필드 / 변수가 없는지 확인하고 싶습니다. 이에 대한 올바른 구문은 무엇입니까?

이것이 내가 현재 가지고있는 것입니다.

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

위의 예에서 "null"을 대체하려면 무엇을 사용해야합니까?

답변:


134

None, False and True모두 템플릿 태그 및 필터 내에서 사용할 수 있습니다. None, False, 빈 문자열 ( '', "", """""") 및 빈 목록 / 튜플은 모두로 평가 될 False때 평가 if되므로 쉽게 수행 할 수 있습니다.

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

힌트 : @fabiocerqueira가 옳고, 논리를 모델에 맡기고, 템플릿을 유일한 프레젠테이션 레이어로 제한하고, 모델에서 이와 같은 것을 계산합니다. 예 :

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

도움이 되었기를 바랍니다 :)


{% cache %} 태그에 None을 매개 변수로 전달하려고했지만 사용할 수 없다는 것을 알게되었습니다. 이 문제를 해결하기 위해 바쁘다.
tobych

7
{% if profile.user.first_name is None %}Django 템플릿에서 구문 오류가 발생합니다.
Rockallite 2013 년

1
힌트는 모델에 HTML을 삽입하여 프레젠테이션과 논리를 혼합하여 가르치려는 것과 정확히 반대입니다. 이름이 없으면 None을 반환하고 (데이터 모델의 논리적 동작) default_if_none템플릿 에서 필터 를 사용하는 것은 어떻습니까?
jbg

@ JasperBryant-Greene 당신이 맞아요! 방금 업데이트되었습니다. 좋은 캐치 맨! 고마워!
Gerard

67

다른 기본 제공 템플릿을 사용할 수도 있습니다. default_if_none

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

1
날짜와 같은 다른 필터와 함께 이것을 사용하는 방법을 아십니까? 예를 들어, 날짜가없는 경우 "N / A"를 표시 할 수 있지만 그렇지 않으면 형식을 지정할 수 있습니까? 좋아요 : {{post.pub_date | default_if_none : "N / A"| date : "Ymd"}}?
Andreas Bergström

@ AndreasBergström 귀하의 경우 먼저 신청하십시오 date. 오류가 발생하면 None을 반환합니다. 그런 다음 default_if_none.
defance

어떤 버전의 Django가 도입 되었습니까?
사용자

10

is연산자 : 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 %}작동합니다 (또한 수락하고 싶지 않다고 가정 '').

if파이썬에서 일반적인 치료에 None, False, '', [], {}, ... 모든 거짓있다.



0

이것을 시도해 볼 수 있습니다.

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

이런 식으로 기본적으로 양식 필드에 first_name연관된 값이 있는지 확인 합니다. 보기 {{ field.value }}장고 문서에서 폼의 필드를 통해 반복 .

Django 3.0을 사용하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.