使用Djang随机提供图像

2024-04-24 04:58:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大约10万张图片,我的目标是生成一个Django支持的网页,每次页面加载时随机显示其中一张图片(实际上它有点复杂,但这是我的最小示例)。我现在的做法是:

  1. 我把10万个文件都放到了我的应用程序的静态文件夹中。在
  2. 我手动生成一个包含所有图像路径的数据库。在
  3. 与URL相关的视图随机选择一个数据库条目(即路径)并从模板生成页面。在

我的视图模板如下所示:

...
<body>
<H1>'Hello World' from the template!</H1>
Here's a random image: "{{rImage}}"<p>
<canvas class="stream" id="canvas" style="z-index: 1; outline: 1px solid red;" width=505px height=336px></canvas>
<script>
var canvas = document.getElementById("canvas");
var cxt = canvas.getContext("2d");

img = new Image();
img.onload = function(){};
img.src = "/static/rim/{{rImage}}";

cxt.drawImage(img,0,0,canvas.width,canvas.height);
</script>
</body>
...

{{rImage}}是随机图像的路径。如您所见,我实际上是用Javascript将图像绘制到HTML5画布上。下面是Python中对应的Django视图:

^{pr2}$

虽然这确实有效,但我很确定我违反了一些基本的设计原则。以这种方式提供静态图像是一种好的做法吗?或者我应该直接将整个图像(而不仅仅是路径)添加到数据库中,例如,使用ImageField?正确的方法是什么?在


Tags: django图像路径视图模板数据库img静态
1条回答
网友
1楼 · 发布于 2024-04-24 04:58:31

正如注释所述,ImageField实际上并没有在数据库中存储图像,它在文件系统中有指向图像的链接,并生成正确的图像url,以便在模板中使用。在

您可以使用rImage = Images.objects.order_by('?')[0]获得随机图像,但请记住,根据您使用的数据库后端(例如mysql),它可能代价高昂且操作缓慢。然后您可以将image对象传递给模板并使用{{rImage.image_field.url}}(image字段为您处理url生成,只需在项目设置中设置适当的值)

相关问题 更多 >