javascript - 使用 Django 提供随机图像

标签 javascript python django

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

  1. 我将所有 100.000 个文件放入我的应用程序的静态文件夹中。
  2. 我手动生成一个包含所有图像路径的数据库。
  3. URL 关联 View 随机选择数据库条目(即路径)并从模板生成页面。

我的 View 模板如下所示:

...
<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 Canvas 上。这是 Python 中相应的 Django View :

def index(request):
    rImage = Images.objects.all()[random.randint(0, 100000)].relativeUrl
    template = loader.get_template('rim/index.html')
    context = RequestContext(request,{'rImage':rImage})
    return HttpResponse(template.render(context))

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

最佳答案

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

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

关于javascript - 使用 Django 提供随机图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25453432/

相关文章:

javascript - 如何发出 jsonp 请求

python - 在python中将字节转换为字符串

python - Django 利用/从其他数据库中提取数据

python - 无法访问 EC2 实例上的 Django 服务器

javascript - 获取服务器上的所有 Discord 线程 (Discord.js)

javascript - 在 React native 移动应用程序中集成 firestore 时获取 'firestore/permission-denied'

javascript - JQuery .toggleClass() 一次有两个类?

python - 如何将 csv 转换并格式化为列表列表,其中标题名称包含在值中

python - 如何使用 Scikit Learn 获得绝对可重现的结果?

django - Django 中的条件分页_按数字