web-dev-qa-db-ja.com

Djangoテンプレートの「none」に相当するものは何ですか?

フィールド/変数がDjangoテンプレート内にないかどうかを見たいです。そのための正しい構文は何ですか?

これは私が現在持っているものです:

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

上記の例では、「null」を置き換えるために何を使用しますか?

76
goelv

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

お役に立てれば :)

107
Gerard

別の組み込みテンプレートdefault_if_noneを使用することもできます

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

yesno ヘルパーを見てください

例えば:

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

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

組み込みテンプレートフィルターdefaultを使用することもできます。

値がFalseと評価された場合(例:None、空の文字列、0、False);デフォルトの「-」が表示されます。

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

ドキュメント: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#default

3
Louis

{% if profile.user.first_name %}は機能します(''も受け入れたくないと仮定します)。

if in Pythonは、一般的にNoneFalse''[]{}、... allを扱います。偽として。

3
Dougal

この「if」を行う必要はありません。{{ profile.user.get_full_name }}を使用します

2
fabiocerqueira