从自定义模板标记访问静态文件

时间:2014-10-10 01:44:05

标签: python django

在我的模板中,我尝试添加一个带有图像输入的自定义标记,然后输出该图像以及描述它是高还是宽的类。

我的代码如下。

模板:

{% load custom_tags %}
{% image_size_class "MANAGEMENT/image.jpg" %}

自定义标记:

from django import template
from PIL import Image
from django.templatetags.static import static
register = template.Library()

@register.simple_tag
def image_size_class(pattern):
    pattern_url = static(pattern)
    img = Image.open(pattern_url)
    width, height = img.size
    if width > height:
        class_tag = "wide"
    else:
        class_tag = "tall"

    return '<img src="' + pattern_url + '"' + '  class="' + class_tag + '">'

期望的结果:

<img src="/static/MANAGEMENT/image.jpg" class="wide">

实际发生的是我从PIL得到错误:

[Errno 2] No such file or directory: u'/static/MANAGEMENT/image.jpg'

看起来PIL无法找到我想要的文件,但我不知道它在哪里看!非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

问题是PIL试图访问&#34; / static /&#34;磁盘上的文件夹。您应该给出文件的真实路径,如下所示:

import os
from django.conf import settings
...

@register.simple_tag
def image_size_class(pattern):
    pattern_url = static(pattern)
    file_path = os.join(settings.STATIC_ROOT, pattern)
    img = Image.open(file_path)
    width, height = img.size
    if width > height:
        class_tag = "wide"
    else:
        class_tag = "tall"

    return '<img src="' + pattern_url + '"' + '  class="' + class_tag + '">'