Python Django 模板中如何判断变量是否为null或空字符串
我刚接触Django,但在Java编程方面有很多年的经验,所以问这个问题我觉得有点不好意思——我相信答案应该很明显,但我就是没找到。我在谷歌上搜索了好久,也查了Django的文档,但要么没有相关内容,要么我就是没看到。我想在模板中测试一个变量,看它是否既不是空值,也不是空字符串,或者只是一些空格。我遇到的问题是,字段中出现了空格——这是我还需要解决的另一个问题……不过,我希望我的逻辑能正常工作。现在,因为我的字符串只包含空格,简单地使用这个:{% if lesson.assignment %} 总是返回真,尽管我并不想要这个结果。我找过类似于去掉空格的功能,但在{% %}之间似乎找不到任何东西。我试过strip,但在{% %}之间不起作用。有人能指点我一下答案的方向吗……或者我可能错过的文档……什么都行!
非常感谢!
6 个回答
5
如果 lesson.assignment
是一个模型字段,你可以在你的模型里定义一个辅助函数,然后使用它:
class Lesson(models.Model):
assignment = models.CharField(..., null=True, ...)
# ...
@property
def has_assignment(self):
return self.assignment is not None and self.assignment.strip() != ""
接着在你的模板中使用 {% if lesson.has_assignment %}
。
6
这个在提问的时候可能还没有被提到,但有一个选择是可以使用内置的模板过滤器 default_if_none
(Django 文档链接)。
举个例子:
{{ lesson.assignment|default_if_none:"Empty" }}
64
{% if lesson.assignment and lesson.assignment.strip %}
.strip
是调用 str.strip()
方法,这样你就可以把只有空格的字符串当作空字符串来处理。同时,前面的检查确保我们先排除掉 None
(因为 None
是没有 .strip()
方法的)。
这里有个证明它有效的例子(在 ./manage.py shell
中):
>>> import django
>>> from django.template import Template, Context
>>> t = Template("{% if x and x.strip %}OK{% else %}Empty{% endif %}")
>>> t.render(Context({"x": "ola"}))
u'OK'
>>> t.render(Context({"x": " "}))
u'Empty'
>>> t.render(Context({"x": ""}))
u'Empty'
>>> t.render(Context({"x": None}))
u'Empty'