web-dev-qa-db-ja.com

Djangoテンプレートフィルタ構文エラー

このコードを使用して、Djangoの組み込みの「デフォルト」フィルターを使用しようとしています

{% load sekizai_tags static compress i18n %}
[...]
<title>{{ title|default:"nothing" }}</title>

しかし、それは私に次の例外を与えます

Django.template.base.TemplateSyntaxError: default requires 2 arguments, 1 provided

テンプレートバックエンドに次の設定を使用しています

TEMPLATES = [
    {
        'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
        'DIRS': [
            str(APPS_DIR.path('templates')),
        ],
        'OPTIONS': {
            'debug': DEBUG,
            'loaders': [
                'Django.template.loaders.filesystem.Loader',
                'Django.template.loaders.app_directories.Loader',
            ],
            'context_processors': [
                'Django.template.context_processors.debug',
                'Django.template.context_processors.request',
                'Django.contrib.auth.context_processors.auth',
                'allauth.account.context_processors.account',
                'allauth.socialaccount.context_processors.socialaccount',
                'Django.template.context_processors.i18n',
                'Django.template.context_processors.media',
                'Django.template.context_processors.static',
                'Django.template.context_processors.tz',
                'Django.contrib.messages.context_processors.messages',
                'sekizai.context_processors.sekizai',
            ],
        },
    },
]

私のエディターはコードを無効としてマークしますが、何千回もチェックします https://docs.djangoproject.com/en/1.8/ref/templates/builtins/

これが例として与えられている場合:

{{ value|default:"nothing" }}

また、title varの名前を変更して、予約されたキーワードではないことを確認しました。

28
Iwan1993

コロンの後にスペースがないことを確認してください。

これは正しいです:

{{ title|default:"nothing" }}

これは例外をスローします:

{{ title|default: "nothing" }}
46
Thierry J.

試してください:

{{ title|default_if_none:"nothing" }}

default_if_none変数が「なし」の場合、指定された文字列を表示します。

デフォルトは、変数がFalseと評価された場合に文字列を表示します。つまり、空の文字列、空のリストなどです。

また、必ずtitle変数をコンテキストで送信してください。送信しない場合は、default_if_noneを使用する必要があります。

1
Amr Abdelaziz