django模板标签检查图像是否存在

时间:2019-02-11 18:09:12

标签: django django-models django-templates

我的应用程序中有一部分允许自定义徽标。

默认对象(和对象视图)状态不是自定义徽标,但是如果存在,则将标题替换为自定义徽标导航栏。

徽标是co(mpany)模型上的标准ImageField:

models.py:

class Co(models.Model):
      logo = models.ImageField(blank=True)

模板:

{% if co.logo %}
    {% block navbar %}
        {% include 'templates/navbar_logo.html' %}
    {% endblock %}
{% endif %}

我也尝试过使用{% if co.logo == None %}{% if not ... %}{% if co.logo.url %}进行此操作,并尝试使用co.logo|default_if_none:""为逻辑建模,但是在未设置徽标的情况下,视图抛出:

ValueError at /co/foo The 'logo' attribute has no file associated with it.

对于...为空也不起作用

{% for co.logo.url in co %}
...
{% empty %}
...
{% endfor %}

在django shell中:

(带有徽标)

c.logo >> <ImageFieldFile: logo.png>
c.logo.url >> '/media/logo.png'

(无徽标)

b.logo >> <ImageFieldFile: None>

是否有内置的django模板标签过滤器,仅当字段上传了图像时,该条件才能通过True?否则不加载导航块?谢谢

2 个答案:

答案 0 :(得分:1)

我通过重新排序标签解决了这个问题:

{% block navbar %}
    {% if co.logo %}
        {% include 'templates/navbar_logo.html' %}
    {% else %}
        {% include 'templates/navbar.html' %}
    {% endif %}
{% endblock %}

答案 1 :(得分:0)

尝试使用“不为空”

{% if co.logo.url is not null %}
    {% block navbar %}
        {% include 'templates/navbar_logo.html' %}
    {% endblock %}
{% endif %}