2016-11-09 42 views
1

我有string_if_invalid在我的django模板设置中设置为'INVALID'。 并有一些模板,看起来像这样: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', 
      ] 
     }, 
    }, 
] 
+1

请显示模板设置。 –

+0

编辑的问题 –

回答

3

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

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

仅用于调试的目的!

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

许多模板(包括Admin站点中的模板)在遇到不存在的变量时都依赖模板系统的静默。如果您将''以外的值指定为string_if_invalid,则会遇到这些模板和网站出现渲染问题。

一般而言,string_if_invalid只能在调试特定模板问题时启用,然后在调试完成后清除。

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