【问题标题】:Django Template tag, generating template block tagDjango模板标签,生成模板块标签
【发布时间】:2011-02-09 11:18:28
【问题描述】:

目前有点卡住,想知道是否有人可以提供帮助。我正在使用django-adminfiles。这是一个简洁的小应用程序。我想用它将图像插入到我正在构建的网站的帖子/文章/页面中。

django-adminfiles 的工作原理是插入一个占位符,即 >> 并使用 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 设置传递给模板来做到这一点,但我想做模板标记的原因是以编程方式设置图像大小。

更新 按照下面的答案尝试了这个:

模板标签:

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 %}

【问题讨论】:

    标签: django image-processing django-templates


    【解决方案1】:

    sorl 需要一个文件系统位置,因为它是一个服务端进程。假设您的文件系统地址镜像您的网址,您应该能够创建custom filter 来转换文件位置。

    更新

    我的建议是这样的:

    {% thumbnail upload.upload.url|path 200x50 %}
    

    【讨论】:

    • 这将如何工作?由于缩略图也是一个标签,你可以有两个标签,即 {% thumbnail filter %}
    • 嗨 刚刚测试了这个,它可以工作。但是,问题是您在服务器上插入带有绝对路径的 img src=。似乎不正确。将用我所拥有的更新问题。
    • 嗨,谢谢,但如前所述,它会在 img src 中插入绝对 url(在服务器上)
    猜你喜欢
    • 2018-10-21
    • 2014-03-20
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2011-01-07
    • 2012-10-31
    • 2014-07-25
    相关资源
    最近更新 更多