Python Django模板并测试变量是否为null或空字符串

时间:2011-07-09 20:03:18

标签: python django django-templates

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

提前感谢!

5 个答案:

答案 0 :(得分:53)

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

.strip调用str.strip(),因此您可以将仅空白字符串处理为空,而前面的检查确保我们首先清除None(不会有{{1}方法)

证明它有效(在.strip()中):

./manage.py shell

答案 1 :(得分: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 %}

答案 2 :(得分:5)

发布问题时可能无法使用此选项,但有一个选项可能是使用内置模板过滤器default_if_noneDjango Documentation Link)。

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

答案 3 :(得分:1)

您可以使用cut filter来删除所有空格来模拟它。但你应该首先找出它为什么包含所有空格。

答案 4 :(得分:0)

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

{% if lesson.assignment.strip %}