django模板中“none”的等价物是什么?

时间:2012-08-14 03:17:29

标签: python django django-forms django-templates django-views

我想看看Django模板中的字段/变量是否为空。这个的正确语法是什么?

这就是我目前所拥有的:

{% if profile.user.first_name is null %}
  <p> -- </p>
{% elif %}
  {{ profile.user.first_name }} {{ profile.user.last_name }}
{% endif%}

在上面的示例中,我将使用什么来替换“null”?

9 个答案:

答案 0 :(得分:98)

None, False and True在模板标签和过滤器中都可用。 None, False,空字符串'', "", """""")和空列表/元组在False评估时都评估为if,因此您可以轻松完成

{% if profile.user.first_name == None %}
{% if not profile.user.first_name %}

提示:@fabiocerqueira是正确的,将逻辑留给模型,将模板限制为唯一的表示层,并在模型中计算类似的东西。一个例子:

# someapp/models.py
class UserProfile(models.Model):
    user = models.OneToOneField('auth.User')
    # other fields

    def get_full_name(self):
        if not self.user.first_name:
            return
        return ' '.join([self.user.first_name, self.user.last_name])

# template
{{ user.get_profile.get_full_name }}

希望这会有所帮助:)

答案 1 :(得分:40)

您还可以使用其他内置模板default_if_none

{{ profile.user.first_name|default_if_none:"--" }}

答案 2 :(得分:4)

查看yesno帮助

例如:

{{ myValue|yesno:"itwasTrue,itWasFalse,itWasNone" }}

答案 3 :(得分:3)

{% if profile.user.first_name %}有效(假设您也不想接受'')。

Python中的

if通常会将NoneFalse''[]{},...全部视为false。

答案 4 :(得分:3)

您还可以使用内置模板过滤器default

如果value的计算结果为False(例如None,则为空字符串,0,False);显示默认的“ - ”。

{{ profile.user.first_name|default:"--" }}

文档: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#default

答案 5 :(得分:2)

您不需要执行此操作'if',请使用:{{ profile.user.get_full_name }}

答案 6 :(得分:2)

is运算符:Django 1.10中的新功能

{% if somevar is None %}
  This appears if somevar is None, or if somevar is not found in the context.
{% endif %}

答案 7 :(得分:0)

您可以尝试以下方法:

{% if not profile.user.first_name.value %}
  <p> -- </p>
{% else %}
  {{ profile.user.first_name }} {{ profile.user.last_name }}
{% endif %}

这样,您实际上正在检查表单字段first_name是否具有与其关联的任何值。参见Looping over the form's fields in Django Documentation中的{{ field.value }}

我正在使用Django 3.0。

答案 8 :(得分:0)

只是对以前的答案的说明:如果我们想显示一个,一切都是正确的 字符串,但要注意显示数字。

特别是当您的值为 0 时,bool(0) 的计算结果为 False,因此它不会显示并且可能不是您想要的。

在这种情况下更好地使用

{% if profile.user.credit != None %}