我有大约10万张图片,我的目标是生成一个Django支持的网页,每次页面加载时随机显示其中一张图片(实际上它有点复杂,但这是我的最小示例)。我现在的做法是:
我的视图模板如下所示:
...
<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?正确的方法是什么?在
正如注释所述,
ImageField
实际上并没有在数据库中存储图像,它在文件系统中有指向图像的链接,并生成正确的图像url,以便在模板中使用。在您可以使用
rImage = Images.objects.order_by('?')[0]
获得随机图像,但请记住,根据您使用的数据库后端(例如mysql),它可能代价高昂且操作缓慢。然后您可以将image对象传递给模板并使用{{rImage.image_field.url}}
(image字段为您处理url生成,只需在项目设置中设置适当的值)相关问题 更多 >
编程相关推荐