2014-10-10 71 views
0

在我的模板中,我试图添加一个自定义标记,它接受一个图像输入,然后输出该图像和一个类,描述它是高还是宽。从自定义模板标记访问静态文件

我的代码如下。

模板:

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

问题是PIL尝试访问磁盘上的“/ static /”文件夹。你应该给真正的文件路径,如下所示:

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 + '">' 
+0

我以为这么多,我只是无法找到一个方法来完成它!非常感谢。我最终得到了图像的完整URL,然后使用它,但这样好多了。 – JBux 2014-10-10 14:42:46