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