0

I ahve this code, the trouble is few of the images are having names, but corresponding to the names the files are not present, how can i know if the images are being displayed, i mean some if statement of something like that.

<img src="{{ STATIC_URL }}images/{{web.image}}" />

The above code is used to render my django image in a template. Thanks.

4

5 回答 5

1

我会在客户端使用 javascript 执行此操作,只需 google 诸如:“javascript image loaded”之类的东西。

于 2011-08-04T13:31:40.930 回答
0

您是说从 {{ STATIC_URL }}images/{{web.image}} 扩展的 URL 会导致 404 Not Found 错误吗?你想弄清楚哪些人在这样做吗?

您确实需要使用一些 python 代码在您的视图中测试这些 URL(可能来自 urllib),但如果该 URL 与运行视图的服务器位于同一服务器上,那么它可能只会挂在您身上。

于 2011-08-04T11:37:03.187 回答
0

在模板中确定文件是否实际存在是相当困难的。这将是视图的工作,假设它{{web.image}}实际上首先返回任何东西。

def my_view(request):
    # some code here
    import os
    if os.path.exists(web.image_path): # for example
        context = { 'web': web }
    render_to_response('my_template.html', context, RequestContext(request)

这假设您实际上知道图像文件的完整文件系统路径是什么。情况并非总是如此,尤其是 django 1.3 中的 staticfiles 应用程序。

但是,我会更担心有时图像存在,有时它们不存在。为什么会这样?图像是否因某种原因被删除?如果是,您需要一种清理数据库的方法。

编辑:

由于似乎还没有你喜欢的答案,你应该试试这个:

import os
class MyModel(models.Model):
    image = models.Image...
    # the rest of your fields

    def get_image_url(self):
        if os.path.exists(self.image.path):
            return u'/%s/img/%s' % (self.app_label, self.image.filename)
        return u'%s/img/default.jpg' % self.app_label

然后在您的模板中执行以下操作:

<img src="{{ STATIC_URL }}{{ web.get_image_url }}" />
于 2011-08-04T11:41:16.713 回答
0

最后我找到了使用 sorl 缩略图的解决方案:http: //thumbnail.sorl.net/examples.html#template-examples

{% thumbnail item.image my_size_string crop="left" as im %}
    <img src="{{ im.url }}">
{% empty %}
    <p>No image</p>
{% endthumbnail %}

这个对我有用。

于 2011-08-16T11:46:08.880 回答
0

如果 web 实际上是您正在访问的数据库对象(正如您的评论似乎指出的那样),并且“图像”是一个 ImageField,您可以使用以下内容:

{% if web.image %}
    <img src="{% web.image.url %}" />
{% else %}
    <img src="{{ STATIC_URL }}images/MyDefaultImage.png" />
{% endif %}

这样,模板将仅在图像存在时提供图像,如果不存在则提供替代图像。

如果我误解了您的问题,我提前道歉,我不太确定我是否正确理解了所有内容。

于 2011-08-05T00:01:52.390 回答