目前有点卡住,想知道是否有人可以提供帮助。我正在使用django-adminfiles。这是一个整洁的小应用程序。我想用它将图像插入到我正在构建的网站的帖子/文章/页面中。
django-adminfiles如何工作是它插入一个占位符,即<<< ImageFile>>>这将使用django模板呈现。它还具有插入自定义选项的功能,即插入媒体图像,我想我会用它来自动调整图像大小并将其包含在帖子中(类似于WP的工作原理)。
Django-adminfiles使用sorl.thumbnail app生成缩略图。
所以我尝试过测试生成缩略图:
用于渲染插入图像的当前模板是:
{% spaceless %}
<img src="{{ upload.upload.url }}" width="{{ upload.width }}" height="{{ upload.height }}" class="{{ options.class }}" class="{{ options.size }}" alt="{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}" />
{% endspaceless %}
我尝试将其修改为:
{% load thumbnail %}
{% spaceless %}
<img src="{% thumbnail upload.upload.url 200x50 %}" width="{{ upload.width }}" height="{{ upload.height }}" class="{{ options.class }}" class="{{ options.size }}" alt="{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}" />
{% endspaceless %}
我收到错误:
Exception Value:
Caught an exception while rendering: Source file: '/media/uploads/DSC_0014.jpg' does not exist.
我认为缩略图需要绝对路径,因此尝试将其放入模板中,这样可行。
即这有效:
{% thumbnail '/Users/me/media/uploads/DSC_0014.jpg' 200x50 %}
所以基本上我需要生成文件的绝对路径给出相对路径(到web根目录)。您可以通过将MEDIA_ROOT设置传递给模板来完成此操作,但我想要执行模板标记的原因是以编程方式设置图像大小。
更新 根据下面的答案尝试了这个:
templatetag:
from django import template
from proj.settings import MEDIA_ROOT
register = template.Library()
@register.filter(name='path')
def path(value):
value = MEDIA_ROOT + '/' + value
return value
模板:
{% load thumbnail %}
{% load images %}
{% spaceless %}
<img src="{{ upload.upload.url|path }}" width="{{ upload.width }}" height="{{ upload.height }}" class="{{ options.class }}" class="{{ options.size }}" alt="{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}" />
{% endspaceless %}
答案 0 :(得分:0)
sorl需要文件系统位置,因为它是服务端进程。假设您的文件系统地址镜像了您的Web地址,您应该能够创建custom filter来转换文件位置。
<强>更新强>
我建议这样的事情:
{% thumbnail upload.upload.url|path 200x50 %}