繁体   English   中英

Python Django 模板和测试变量是 null 还是空字符串

[英]Python Django Templates and testing if a variable is null or empty string

我是 django 的新手,但在 java 世界中有多年的编码经验,所以我觉得问这个问题很荒谬——我确信答案很明显,我只是想念它。 我似乎找不到在谷歌或其他东西中查询这个的正确方法......我已经搜索了 django 文档,它要么不存在,要么我只是没有看到它。 如果 var 不是 null 或空字符串或只是一堆空格,我只想在模板测试中进行测试。 我有一个问题,空间被引入我的领域 - 另一个我必须并且将会解决的问题......但是,我希望我的逻辑无论如何都能起作用。 现在,因为我的字符串只包含空格,所以只需这样做:{% if lesson.assignment %} 总是通过,即使我不希望它通过。 我一直在寻找可以在 {% %} 之间工作的修剪类型功能,但我似乎找不到任何东西。 我试过 strip,但它在 {% %} 之间不起作用。 有人可以指出答案的方向吗……我可能错过了一些文档……什么?

提前致谢!

{% if lesson.assignment and lesson.assignment.strip %}

.strip调用str.strip()以便您可以将纯空格字符串处理为空,而前面的检查确保我们首先清除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'

发布问题时这可能不可用,但一个选项可能是使用内置模板过滤器default_if_noneDjango 文档链接)。

例如: {{ lesson.assignment|default_if_none:"Empty" }}

如果lesson.assignment是 model 字段,您可以在 model 中定义一个助手 function 并使用它:

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 %}

您可以通过使用cut过滤器删除所有空格来模拟它。 但是您可能应该首先找出为什么它包含所有空格。

这是一个简单的方法,来自 Django 版本 3.2

{{ lesson.assignment|default:"nothing" }}

这适用于两种情况(空字符串和无对象)。

参考链接: https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#std:templatefilter-default

您可以在 Django 模板变量中的任何位置调用任何内置方法。 例如,您可以调用 Python 字符串方法strip 所以这将起作用:

{% if lesson.assignment.strip %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM