【问题标题】:How to thumbnail static files?如何缩略图静态文件?
【发布时间】:2012-10-09 00:53:47
【问题描述】:

我想用 sorl 缩略图调整我的静态文件的大小,但它不起作用

这是我的代码

{% if not new.photo %}

{% with path="{{STATIC_URL}}/images/empty-news.jpg" %}
{% thumbnail path "80x80" crop="center" as im %}
<a href="#" class="image"><img alt="" src="{{im.url}}" class="frame2"></a>
{% endthumbnail %}
{% endwith %}

{% else %}
{% thumbnail new.photo "80x80" crop="center" as im %}
<a href="{% url news_detail new.slug %}" class="image">
<img alt="" src="{{im.url}}" class="frame2"></a>
{% endthumbnail %}
{% endif %}

如果我有图像,它会显示图像,但是当我没有图像时,我不能使用默认图像,因为缩略图不起作用

【问题讨论】:

标签: django django-templates sorl-thumbnail


【解决方案1】:

对我有用的丑陋的选项,传递你通常会传递给static模板标签的路径(注意它假定http协议,所以它可以改进):

{% with 'http://'|add:request.get_host|add:STATIC_URL|add:image_path as path %}
    {% thumbnail path "720x306" crop="center" as im %}
      <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
    {% endthumbnail %}
{% endwith %}

这是通过建立静态图像的绝对路径来实现的。

【讨论】:

  • 我认为这不适用于托管在其他地方的静态资产(例如 S3)
【解决方案2】:

老实说……这看起来不错;这意味着您的设置中可能存在一些简单的错误。

可能的错误设置: 您如何在设置中定义 STATIC_URL?另外,DEBUG 的值是多少(如果您在本地开发,请确保将其设置为True)?正如@goliney 指出的那样,您的路径可能一团糟。尝试拉出缩略图块,并将图像的 src 设置为 {{ STATIC_URL }}/images/empty-news.jpg 并在尝试制作缩略图之前验证它是否有效。

忘记加载缩略图:确保在您的模板中添加{% load thumbnail %},然后再引用{% thumbnail %} 块。

【讨论】:

  • 我的静态网址和缩略图设置很好。他们工作。我可以缩略图其他动态图像,但如果它是静态的,它就不起作用。我的静态网址也定义正确。
【解决方案3】:

以下将起作用

{% with STATIC_URL|add:"/images/empty-news.jpg" as path %}
    {% thumbnail path "80x80" crop="center" as im %}
        <a href="#" class="image">
            <img alt="" src="{{im.url}}" class="frame2"></a>
    {% endthumbnail %}
{% endwith %}

【讨论】:

  • 这对我不起作用,因为 sorl 不接受相对 URL。我对此进行了调整以接受绝对 URL(请参阅本页其他地方的答案)。
【解决方案4】:

我自己也在解决同样的问题。看来,如果您想在模板中使用 STATIC_URL,您需要确保传递给缩略图标签的路径是绝对路径(将路径视为外部路径。)

显然,相对路径仅适用于 MEDIA_ROOT 中的图像,似乎是为来自模型的图像设计的。

作为测试,请尝试输入完整的 http 路径。

见: http://sorl-thumbnail.readthedocs.org/en/latest/examples.html

【讨论】:

    【解决方案5】:

    为了掩盖更多丑陋之处,我制作了一个自定义过滤器,在 settings.py 中使用了一个常量 SITE_URL:

    settings.py

    [...]
    SITE_URL = "google.it"
    [...]
    

    templatetags/staticthumb.py

    from django.conf import settings
    
    from django import template
    
    register = template.Library()
    
    @register.filter()
    def static_url(value):
        return ''.join(["http://", settings.SITE_URL, settings.STATIC_URL, value])
    

    然后在模板中使用它:

    {% load thumbnail staticthumb %}
    
    {% with image_path|static_url as path %}
       {% thumbnail path "720x306" crop="center" as im %}
          <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
       {% endthumbnail %}
    {% endwith %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 2018-03-21
      • 2020-09-26
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 2016-09-11
      相关资源
      最近更新 更多