图像未出现在 Django 模板 For Loop 中
Posted
技术标签:
【中文标题】图像未出现在 Django 模板 For Loop 中【英文标题】:Images not appearing in Django template For Loop 【发布时间】:2021-11-02 21:29:03 【问题描述】:See Problem Here
我想遍历 Django 中的静态图像目录。图像被正确循环,但我的 <img src />
语法有问题。我在 flag 上尝试了许多变体,但无法正常工作。有人可以建议吗?
在 settings.py 我创建了以下 STATIC_ROOT 对象:
STATIC_ROOT = '/Users/TheUnforecastedStorm/Desktop/Code_projects/Portfolio_Site/portfolio_site/entrance/static'
在 views.py 中,我将此文件路径加入到我的图像目录中,并将图像列表放入上下文字典中。然后我在回复中加入了这本字典:
import os
from django.conf import settings
from django.shortcuts import render
# Create your views here.
def index(request):
# Create a dictionary
context =
# Join images directory to index.html view
flags = os.listdir(os.path.join(settings.STATIC_ROOT, "entrance/images/"))
context['flags'] = flags
# Return response
return render(request, "entrance/index.html", context)
然后我在模板中循环遍历这些图像:
<!DOCTYPE html>
% load static %
<html>
<head>
<link rel="stylesheet" href="% static 'entrance/entrance.css' %">
<script src="% static 'entrance/entrance.js' %" type="text/javascript"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
% for flag in flags %
<img src=" flag " />
% endfor %
</body>
</html>
【问题讨论】:
在我使用静态图像的模板中,我的源将使用静态模板标签。也许试试% static flag %
之类的东西?编辑:我注意到的一个问题是os.listdir()
返回的flags
列表中的值将仅包含该路径中的项目名称,而不包含完整路径本身。因此,如果您尝试访问的图像位于 entrance/images
中,请尝试 % static 'entance/images/' flag %
。
首先检查你是否创建了正确的路径 - 因为 STATIC_ROOT
是 ..../entrance/static
广告你添加 entrance/images
所以你最终有 ..../entrance/static/entrace/images
。其他问题可能是服务器可能仅从STATIC_ROOT
发送图像,这意味着..../entrance/static/
或其子文件夹 - 如果您尝试使用不同的文件夹,那么出于安全原因它将阻止文件。
@NathanRoberts 不错。我更新了那行代码以读取<img src="% static 'entrance/images/' flag %" alt="problem" />
,但仍然遇到同样的问题。我在 Chrome 中检查了该页面,可以看到请求 URL 将转到保存图像的正确目录:127.0.0.1:8000/static/entrance/images,它似乎正在访问它们,但由于某种原因不会显示它们。我在问题顶部添加了一个屏幕截图。
@furas 我仔细检查了我创建的路径是否正确。我在上面的检查模式下添加了页面的屏幕截图 - 它显示了目录的正确路径。我感觉到这是通过在 % static 'directory/file' % 上下文中访问 flag 的 Django 模板的问题,但我无法找出解决它的正确方法。
@Mark1 你能拍下其中一张图片的 html 在检查器中的样子吗?它似乎没有从您输入 src url 的 flag
获取文件名。也许尝试从 src 属性的 url 中的“flag”一词周围删除
。
【参考方案1】:
@Mark1 从上面处理我的 cmets,我无法找到任何东西来确认它,但似乎 % static %
模板标签只能采用一个额外的参数来创建路径,所以这是你的东西可以试试。
在你看来:
def index(request):
# Create a dictionary
context =
# Join images directory to index.html view
flags = os.listdir(os.path.join(settings.STATIC_ROOT, "entrance/images/"))
# ADD IN THIS LINE HERE
flags = ['entrance/images/'+fl for fl in flags]
context['flags'] = flags
# Return response
return render(request, "entrance/index.html", context)
我添加的行会将“entrance/images/”添加到您正在搜索的目录中所有文件名的开头。
然后在你的模板中
% for flag in flags %
<img src="% static flag %" />
% endfor %
让我知道这是否有效。
【讨论】:
这成功了!非常感谢你的帮助!昨晚我找到了一个解决方案,该解决方案通过遍历views.py 中的url 列表来接近,但我仍然无法完全得到我想要的东西。你对 django static 的洞察只允许一个额外的参数被证明是正确的。 太棒了,很高兴我能帮上忙以上是关于图像未出现在 Django 模板 For Loop 中的主要内容,如果未能解决你的问题,请参考以下文章