2016-08-17 201 views
1

我有我想要显示的静态文件中的对象图片。但是对于一些物体,我没有图片,对于那些我想显示图像说“没有图片可用”。因此,我有一个名为“图片”的字段,对于有图片的对象设置为1,对于没有图片的对象,设置为0。 我做了一个模板标签,应该能够插入正确的图片,但我面临一个问题。使用django自定义模板标签来显示照片

模板标签文件:

def static_picture(id_internal, picture): 
    if picture == 1: 
     return '"' + "{% static" + ' "' + 'img/pictures/' + id_internal + '.jpg' + '"' + ' %}' + '"' 
    else: 
     return '"' + "{% static" + ' "' + 'img/pictures/picture_missing.jpg' + '"' + " %}" + '"' 

HTML:

<img src="{{ object.id_internal|static_picture:object.picture }}" class="img-responsive"> 

它输出这一点,但没有显示图片:

<img src="{% static "img/pictures/339-10026.jpg" %}" class="img-responsive"> 

的路径是正确的,画面存在。我究竟做错了什么?

回答

1

在{{}}被评估之后,它不会像那样工作,所以没有更多评估。所以你看到了字符串。 您需要编辑的代码,

Jinja(从{{}} html代码创建模板转换器)评估您的模板功能并将其插入到该位置。之后,Django发送到浏览器:

<img src="{% static "img/pictures/339-10026.jpg" %}" class="img-responsive"> 

但浏览器不明白这一点。所以你必须返回你的函数full_path。

{%static ...%}只是将路径加上静态文件夹的路径。该路径在设置中可用。设置可以在django.conf的模块设置中访问。

from django.conf import settings 
def static_picture(id_internal, picture): 
    if picture == 1: 
     return '"{}/img/pictures/{}.jpg"'.format(settings.STATIC_URL, id_internal) 
    else: 
     return '"{}/img/pictures/picture_missing.jpg"'.format(settings.STATIC_URL) 

这回全路径文件

<img src="{{ object.id_internal|static_picture:object.picture }}" class="img-responsive"> 
<img src="path/to/static_folder/img/picturesXXX.jpg" class="img-responsive"> 
相关问题