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

yquaqz18  于 2022-12-24  发布在  Go
关注(0)|答案(9)|浏览(252)

我想看看Django模板中的字段/变量是否为none,正确的语法是什么?
这是我目前拥有的:

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

在上面的例子中,我应该用什么来替换"null"?

14ifxucb

14ifxucb1#

None, False and True都可以在模板标签和过滤器中使用。None, False、空字符串('', "", """""")和空列表/元组在由if求值时都求值为False,因此您可以轻松地

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

xmd2e60i2#

您还可以使用另一个内置模板default_if_none

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

wlzqhblo3#

您还可以使用内置模板过滤器default
如果值的计算结果为False(例如,None、空字符串、0、False);显示默认值“--”。

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

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

olqngx59

olqngx594#

is操作员:Django 1.10中的新功能

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

mbskvtky5#

看看这个yesno助手
例如:

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

eaf3rand6#

{% if profile.user.first_name %}可以工作(假设您也不想接受'')。
Python中的if通常会将NoneFalse''[]{} ...全部视为false。

im9ewurl

im9ewurl7#

如果我们需要验证具有null值的字段,我们可以进行检查,并按如下所述进行处理:

{% for field in form.visible_fields %}
    {% if field.name == 'some_field' %}
        {% if field.value is Null %}
            {{ 'No data found' }}
        {% else %}
            {{ field }}
        {% endif %}
    {% endif %}
{% endfor %}
exdqitrt

exdqitrt8#

你可以试试这个:

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

这样,你实际上是在检查表单字段first_name是否有任何值与之关联。参见Django文档中的循环表单字段中的{{ field.value }}
我用的是Django 3.0。

uyhoqukh

uyhoqukh9#

关于之前的答案,请注意:如果我们想显示一个字符串,那么一切都是正确的,但是如果你想显示数字的话要注意。
特别是当你有一个0值bool(0)的计算结果为False,所以它不会显示,可能不是你想要的。
在这种情况下更好地使用

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

相关问题