Как сделать миниатюр статичных файлов?

Я хочу изменить размер статических файлов с помощью миниатюры 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 %}

Если у меня есть изображение, оно показывает изображение, но когда у меня нет изображения, я не могу использовать изображение по умолчанию, потому что эскиз не работает.

Ответ 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 %}

Это работает, создавая абсолютный путь к статическому изображению.

Ответ 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 %}

Ответ 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 %}