变量为“无”时默认模板标记输出的Django设置?

2024-04-19 20:42:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个django设置或编程方法,使所有django模板标记在值为None时显示空字符串。例如,假设我有一些django模板:

{{cat}} chases {{mouse}}

如果猫和老鼠都不是,它将呈现为:

None chases None

我知道我可以使用{{cat|default:""}}{{mouse|default_if_none:""}}来设置每一个

但是,我正在寻找某种设置,允许我为所有标记设置默认值,而不必显式地向每个标记添加|default:""

我还知道一个叫做TEMPLATE_STRING_IF_INVALID的设置。但是,此设置仅适用于无效字符串。没有一个被认为是有效的。


Tags: django方法字符串标记none模板defaultif
4条回答

“显式优于隐式”

想想当你忘记了你已经启用了“将所有具有错误值的内容呈现为空字符串”设置而无法正确呈现时,你会多么愤怒。

如果您发现您经常使用default_if_none筛选器,那么您可能需要考虑在将转换None传递到模板之前将其更改为''

您的模板将更简单,并且您将有显式的决定对空值进行字符串化。

“显式优于隐式”

想一想,当你忘记启用了“将所有具有错误值的内容呈现为空字符串”设置而无法正确呈现时,你会多么愤怒。

如果您发现您经常使用default_if_none筛选器,那么您可能需要考虑在将转换None传递到模板之前将其更改为''

您的模板将更简单,并且您将有显式的决定对空值进行字符串化。

这应该能做到,把它放在初始化代码的某个地方,例如在wsgi.py

# Patch template Variable to output empty string for None values
from django.template.base import Variable
_resolve_lookup = Variable._resolve_lookup
def new_resolve_lookup(self, *args, **kwargs):
    o = _resolve_lookup(self, *args, **kwargs)
    return o or u""
Variable._resolve_lookup = new_resolve_lookup

不存在这样的东西。这就是^{}^{}过滤器存在的原因。这是一个功能;它让你思考你在做什么,而不是依赖于一些经常会误导你的行为。如果一个变量有可能是None,那么您应该为这种意外情况做好计划。如果变量应该始终具有一些值,则“None”表示有问题。如果默认值只是呈现一个空字符串,那么您将不知道该值是未定义的还是实际上是一个空字符串。写连贯的代码,忘掉捷径。

相关问题 更多 >