【问题标题】:How do i get to know if an image is rendered in a webpage? (django templates)我如何知道图像是否在网页中呈现? (Django 模板)
【发布时间】:2011-08-04 11:32:42
【问题描述】:

我有这段代码,问题是很少有图像有名称,但对应于文件的名称不存在,我怎么知道图像是否正在显示,我的意思是一些类似的 if 语句.

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

以上代码用于在模板中渲染我的 django 图像。 谢谢。

【问题讨论】:

  • 可能想再次检查答案

标签: django django-templates django-media


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,url是同一台服务器上的。
    • 如果您知道图像应该在服务器上的完整路径,那么通过 URL 测试是一件坏事...查看其他答案
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 感谢您的努力,但您误解的是,每个 web.image 都有一个有效名称,但每个有效名称都没有图像文件。所以 {% if web.image %} 总是会给出一个真实的。
    • 您是在尝试实施一些小技巧来解决问题,还是您正在寻找一个长期的解决方案?我的意思是,您是否打算使用新的断开链接?如果不存在,您最好编写一个基本脚本来检查文件是否存在,如果不存在,则从数据库中删除对该文件的引用。
    • 试图实现一个小技巧来解决问题,到目前为止我不想接触数据库。
    【解决方案4】:

    很难在模板中确定文件是否实际存在。这将是视图的工作,假设 {{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 中的静态文件应用程序。

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

    编辑:

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

    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 }}" />
    

    【讨论】:

    • 不,问题是我有一个包含 200 张图像的文件夹,在数据库字段中我有 160 张的名称,其余 40 张图像我想显示默认图像,我不想要更改数据库并希望在模板中进行一些快速修复,这不会占用太多资源。
    • 那么你需要使用python文件工具来检查foo-12345.png是否存在,否则将图像路径设置为default.png并有一个名为的图像。
    • 您无法仅在模板中解决此问题,因为模板无法直接访问文件系统。您需要在视图中或可能在模板标签中编写一些代码。
    【解决方案5】:

    我终于找到了使用 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 %}
    

    它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2020-07-15
      • 2021-04-17
      相关资源
      最近更新 更多