【问题标题】:django template tag check if image existsdjango模板标签检查图像是否存在
【发布时间】:2019-07-05 07:17:22
【问题描述】:

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

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

logo 是 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...empty 也不行

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

在 Django 外壳中:

(带标志)

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

(无标志)

b.logo >> <ImageFieldFile: None>

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

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      尝试使用'不为空'

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

      【讨论】:

      • 也在 models.py 中设置 null=True
      • 这在 django 的较新版本中不起作用,因为总是评估块!请参阅有关重新订购的其他答案! (块需要在最外面)
      猜你喜欢
      • 2021-07-02
      • 2011-09-07
      • 1970-01-01
      • 2011-02-28
      • 2011-11-20
      • 1970-01-01
      • 2013-05-18
      • 2013-06-07
      • 1970-01-01
      相关资源
      最近更新 更多