使用django自定义模板标签显示照片

时间:2016-08-17 17:21:51

标签: html django python-3.x

我想要显示我的静态文件中的对象图片。但是对于某些物体,我没有照片,对于那些我想要显示“无照片”的图像。因此,我有一个称为图片的字段,对于具有可用图片的对象设置为1,对于没有可用图片的对象设置为0。 我制作了一个模板标签,应该可以插入正确的图片,但我遇到了问题。

模板标记文件:

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 个答案:

答案 0 :(得分: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">