如何缩略图静态文件?

时间:2012-10-18 14:17:10

标签: django django-templates sorl-thumbnail

我想用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 %}

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

5 个答案:

答案 0 :(得分:7)

对我有用的丑陋选项,传递通常传递给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 %}

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

答案 1 :(得分:3)

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

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

忘记加载缩略图:确保在对{% load thumbnail %}块的任何引用之前将{% thumbnail %}放入模板中。

答案 2 :(得分: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 %}

答案 3 :(得分:2)

我自己正在处理同样的问题。看来如果你想在你的模板中使用STATIC_URL,你需要确保传递给thumbnail标签的路径是绝对的(将路径看作是外部路径。)

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

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

请参阅: http://sorl-thumbnail.readthedocs.org/en/latest/examples.html

答案 4 :(得分:1)

为了掩盖我使用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 %}