Django string_if_invalid 和默认值

Geo*_*nko 5 python django templates django-templates

我已string_if_invalid在 django 模板设置中设置为“无效”。有一些模板看起来像这样:

{{ some_nonexisting_value|default:'Default value' }}
Run Code Online (Sandbox Code Playgroud)

渲染后的结果如下所示'INVALID'。因此,不使用默认值。有什么办法可以使string_if_invalid在不更改模板的情况下使用默认值?

编辑:模板设置如下所示:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'APP_DIRS': True,
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'OPTIONS': {
            'libraries': {
                'utm_tags': 'kurator.templatetags.utm_tags',
            },
            'string_if_invalid': 'INVALID',
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'kurator.context_processors.static_hash',
                'kurator.context_processors.debug',
            ]
        },
    },
]
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 6

不,不可能获得default过滤器显示提供的默认值而不是无效字符串。

\n

请注意,文档警告不要使用string_if_invalid选项:

\n
\n

仅用于调试目的!

\n

尽管string_if_invalid它可能是一个有用的调试工具,但将其作为\xe2\x80\x98开发默认值\xe2\x80\x99打开是一个坏主意。

\n

许多模板(包括管理站点中的模板)在遇到不存在的变量时依赖于模板系统的静默。如果您分配的值不是\'\'tostring_if_invalid,您将遇到这些模板和站点的呈现问题。

\n

一般来说,string_if_invalid仅应在调试特定模板问题时启用,然后在调试完成后清除。

\n
\n

对于您自己的模板,我想您可以编写自己的模板标记,该标记采用变量名称和默认值,然后尝试从模板上下文中获取变量。但是,这并不能解决其他使用常规模板的问题default过滤器的其他模板(包括 Django admin)中的问题。

\n