Django glob媒体映像文件,并在srcs上使用

时间:2019-03-08 06:32:10

标签: python django django-2.1

我已经使用glob.iglob()成功返回了“ media / particular_user /”目录中的每个图像文件。

问题是我不能直接在<img src="" />上使用它,因为它是从根目录'/home/auser/django-apps/blogproject/media/blogs/1/images/'而不是'media/blogs/1/images/'返回的。我正在考虑从视图中循环每个结果,并删除每个字符串中的“ / home / auser / django-apps / blogproject /”,仅返回“ media / blogs / 1 / images /”。但是,还有其他更简便的方法或更合适的方法吗?因为此过程使工作量加倍。

这是我的代码:

views.py:

def blog(request, blog_slug):
    """
    Blog view page
    :param request:
    :return:
    """
    context = dict()

    file_extensions = ('*.png', '*.jpg', "*.gif")
    image_files = []

    for file_extension in file_extensions:
        image_files.extend(glob.iglob(settings.MEDIA_ROOT+"/blogs/1/images/"+file_extension, recursive=True))

    context['image_files'] = image_files

    context['slug'] = blog_slug

    return render(request, "app_plan/plan.html", context)

blog_view.html:

<ul>
    {% for image_file in image_files %}
        <li class="inline">
            <img src="{{image_file}}"/>
        </li>
    {% endfor %}
</ul>

在html中使用{{image_files}}显示 image_files 时,将显示以下记录:

[
    '/home/auser/django-apps/blogproject/media/blogs/1/images/5.png', 
    '/home/auser/django-apps/blogproject/media/blogs/1/images/4.png', 
    '/home/auser/django-apps/blogproject/media/blogs/1/images/3.png', 
    '/home/auser/django-apps/blogproject/media/blogs/1/images/2.png', 
    '/home/auser/django-apps/blogproject/media/blogs/1/images/1.png', 
]

问题是我无法直接在我的<img src="{{image_file}}"/>上使用它们,因为它是从根目录而不是从“ media /”访问的

这是我对问题的解决方案,但是有适当的方法吗?

    file_extensions = ('*.png', '*.jpg', "*.gif")
    image_files = []

    for file_extension in file_extensions:
        files = glob.iglob(settings.MEDIA_ROOT+"/sample_user/1/images/"+file_extension, recursive=True)
        media_files = [file.replace(settings.MEDIA_ROOT+"/", settings.MEDIA_URL) for file in files]
        image_files.extend(media_files)

    context['image_files'] = image_files

0 个答案:

没有答案