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


101

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

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

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

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

回答:


131

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

お役に立てれば :)


Noneをパラメーターとして{%cache%}タグに渡そうとしたところ、使用できないことがわかりました。これを回避するために忙しい。
tobych 2013

7
{% if profile.user.first_name is None %}Djangoテンプレートで構文エラーが発生します。
Rockallite 2013

1
ヒントは、モデルにHTMLを配置することにより、プレゼンテーションとロジックを混合し、教えることとは正反対のことを行います。名前がない場合(データモデルの論理動作)にNoneを返しdefault_if_none、テンプレートでフィルターを使用するのはどうでしょうか。
jbg 2013年

@ JasperBryant-Greene正解です!更新されました。グッドキャッチマン!どうも!
ジェラール

66

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

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

1
これを日付などの他のフィルターと一緒に使用する方法はありますか?たとえば、日付がない場合に「N / A」を表示することはできますが、それ以外の場合はフォーマットしますか?例:{{post.pub_date | default_if_none: "N / A" | date: "Ymd"}}?
AndreasBergström18年

@AndreasBergströmあなたのケースでは、date最初に適用します。エラーが発生した場合はNoneを返します。次に、適用しますdefault_if_none
1

これはどのバージョンのDjangoに組み込まれましたか?
ユーザー

10

isoperator:Django 1.10の新機能

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

5

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

例えば:

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

4

{% if profile.user.first_name %}動作します(受け入れたくない場合も同様です'')。

ifPythonで一般的な扱いでNoneFalse''[]{}、...すべての偽として。


2

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

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

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

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


1
default_if_noneはおそらくより良いオプションでしょう。
dbn

0

あなたはこれを試すことができます:

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

この方法では、フォームフィールドfirst_nameに関連付けられた値があるかどうかを本質的にチェックしています。Django Documentationのフォームのフィールドをループするを参照{{ field.value }}してください。

Django 3.0を使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.