防止Django模板在获取缺少图像的ImageField宽度时出错

防止Django模板在获取缺少图像的ImageField宽度时出错,django,django-templates,python-imaging-library,Django,Django Templates,Python Imaging Library,在Django中,当我有一个ImageField并希望在模板中输出其宽度时,我会: {{ myimage.width }} 如果找到图像,则此操作效果良好。但是,如果由于某种原因无法找到图像,获取宽度,则页面将创建错误,模板将不会呈现。这种行为是有道理的,但是,我如何使它优雅地失败呢?也就是说,如果找不到图像,我希望模板不为myimage.width输出任何内容,并且能够继续呈现页面。只需编写即可 {% if myobject.image %} {{ myobject.image.wi

在Django中,当我有一个ImageField并希望在模板中输出其宽度时,我会:

{{ myimage.width }}
如果找到图像,则此操作效果良好。但是,如果由于某种原因无法找到图像,获取宽度,则页面将创建错误,模板将不会呈现。这种行为是有道理的,但是,我如何使它优雅地失败呢?也就是说,如果找不到图像,我希望模板不为myimage.width输出任何内容,并且能够继续呈现页面。

只需编写即可

{% if myobject.image %}
    {{ myobject.image.width }}
{% endif %}
如果image为None,则不会有任何内容。

只需编写

{% if myobject.image %}
    {{ myobject.image.width }}
{% endif %}

如果image为None,则不会有任何内容。

可能不是您最喜欢的解决方案:您可以向包含ImageField的模型添加一个方法get\u my\u image\u width()。此方法检查映像是否存在,并在这种情况下返回None order“”

或者,如果图像不存在,您可以对ImageField类进行子类化,并返回一个伪对象,而不是None。此虚拟对象可以如下所示:

class Dummy(object):
    def __getattr__(self, attr):
        return None

可能不是您最喜欢的解决方案:您可以将get_my_image_width()方法添加到包含ImageField的模型中。此方法检查映像是否存在,并在这种情况下返回None order“”

或者,如果图像不存在,您可以对ImageField类进行子类化,并返回一个伪对象,而不是None。此虚拟对象可以如下所示:

class Dummy(object):
    def __getattr__(self, attr):
        return None

IOError“没有这样的文件或目录”怎么办?例如,设置了路径,图像被重命名或删除?当图像被重命名时,您将得到404,而不是异常。UPD:将引发的异常是访问
width
属性。在这种情况下,如果需要,您必须修改
ImageField
,以不引发异常。在不修改对象的情况下重命名文件是不正常的。IOError“没有这样的文件或目录”怎么办?例如,设置了路径,图像被重命名或删除?当图像被重命名时,您将得到404,而不是异常。UPD:将引发的异常是访问
width
属性。在这种情况下,如果需要,您必须修改
ImageField
,以不引发异常。在不修改对象的情况下重命名文件不是正常情况。