【问题标题】:Django string_if_invalid and defaultDjango string_if_invalid 和默认值
【发布时间】:2017-03-23 04:49:45
【问题描述】:

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

{{ some_nonexisting_value|default:'Default value' }}

渲染后的结果看起来像'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',
            ]
        },
    },
]

【问题讨论】:

标签: python django templates django-templates


【解决方案1】:

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

注意the docs 警告不要使用string_if_invalid 选项:

仅用于调试目的!

虽然string_if_invalid 可能是一个有用的调试工具,但将其作为“开发默认设置”打开是个坏主意。

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

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

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

【讨论】:

    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2015-05-05
    • 2016-12-27
    • 2018-10-22
    • 2011-09-04
    • 2017-07-31
    相关资源
    最近更新 更多