django循环静态文件目录

时间:2020-08-21 19:50:06

标签: python django

我试图通过静态/文件夹循环图像。我可以在“静态”主文件夹中循环浏览图片,但是当我将它们放在“静态/文件夹”中时,我不确定如何在html中完成图片。

我的html行(当img在“静态”主文件夹中时有效)

{% for file in files %}
    <img src=" {% static file %}" height="800">
    <p>File name:{{ file }}</p>
{% endfor %}

我的views.py

def album1(request):
    images = '/home/michal/PycharmProjects/Family/gallery/static/'
    files = os.listdir(os.path.join(images))
    context = {'files': files}
    return render(request, 'gallery/album1/main.html', context)

如果我将视图更改为:

def album1(request):
    images = '/home/michal/PycharmProjects/Family/gallery/static/'
    files = os.listdir(os.path.join(images, 'folder'))
    context = {'files': files}
    return render(request, 'gallery/album1/main.html', context)

它按预期的那样在'static / folder /'中循环文件名,但是后来我不知道如何在html中更改它,因为其将文件名添加到:/ static / {{file}}而不是/ static / folder / {{文件}}。 我想我在此特定页面上缺少某些东西或需要更改静态加载的东西吗?

{% load static %}                 # either here 
<img src=" {% static file %}">    # or here?

1 个答案:

答案 0 :(得分:0)

您在文件名前添加文件夹名称:

from os.path import join

def album1(request):
    images = '/home/michal/PycharmProjects/Family/gallery/static/'
    files = os.listdir(join(images, 'folder'))
    context = {'files': [join(folder, file) for file in files]}
    return render(request, 'gallery/album1/main.html', context)

您可以使用|slice template filter [Django-doc]在模板中进行切片:

{% for file in files|slice:':21' %}
    <img src=" {% static file %}" height="800">
    <p>File name:{{ file }}</p>
{% endfor %}

但是在视图中执行此操作效率更高,因为通过执行更少的join调用可以节省周期,而且模板的效率比Python代码低。

相关问题