You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板配合JS实现随机图片加载与30秒自动轮换功能

实现方案说明

1. Django模板语法在JS中的使用规则

Django的{% %}、{{ }}等模板语法仅能在被Django服务渲染的HTML模板文件内生效,如果你把JS代码写在独立的静态.js文件中,无法直接识别模板语法,将相关JS逻辑嵌入到模板的<script>标签中即可正常使用。

2. 方案1:通过Django动态传递图片路径(无需手动写路径)

后端视图配置

你可以在视图中提前读取所有画廊图片的路径,传递到模板上下文:

# views.py
from django.shortcuts import render
from .models import GalleryImage # 假设你已经定义了存储画廊图片的模型

def gallery_page(request):
    # 批量获取所有图片的访问路径
    image_urls = [item.img_field.url for item in GalleryImage.objects.all()]
    return render(request, 'gallery.html', context={'image_urls': image_urls})

模板端代码实现

<!-- gallery.html 模板文件 -->
<div id="gallery-container"></div>

<style>
/* 可选:添加图片淡入过渡效果 */
.fade-in {
  animation: fadeIn 0.8s ease-in;
  max-width: 100%;
  height: auto;
}
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
</style>

<script>
// 从Django注入的json数据中读取图片路径列表
{{ image_urls|json_script:"gallery_image_list" }}
const images = JSON.parse(document.getElementById('gallery_image_list').textContent);

// 随机加载图片的函数
function loadRandomGalleryImg() {
  const randomIndex = Math.floor(Math.random() * images.length);
  const randomImgUrl = images[randomIndex];
  document.getElementById('gallery-container').innerHTML = `<img class="fade-in" src="${randomImgUrl}" alt="艺术画廊作品">`;
}

// 页面加载/刷新时首次执行
window.addEventListener('load', loadRandomGalleryImg);
// 每30秒自动切换一次图片
setInterval(loadRandomGalleryImg, 30 * 1000);
</script>

3. 方案2:纯JS实现(无需修改Django后端)

如果你已经提前整理好了所有图片的文件名,也可以直接在模板JS中拼接静态资源路径,无需修改后端逻辑:

<div id="gallery-container"></div>

<style>
/* 可选过渡效果同方案1 */
.fade-in {
  animation: fadeIn 0.8s ease-in;
  max-width: 100%;
  height: auto;
}
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
</style>

<script>
// 替换为你自己的图片文件名列表
const imageNames = ['banner-1.jpg', 'banner-2.jpg', 'banner-3.jpg', 'banner-4.jpg'];
// 通过Django static标签获取静态资源基础路径,无需手动写全路径
const imgBasePath = "{% static 'images/gallery/' %}"; // 替换为你实际的静态图片存放目录

function loadRandomGalleryImg() {
  const randomIndex = Math.floor(Math.random() * imageNames.length);
  const imgFullPath = imgBasePath + imageNames[randomIndex];
  document.getElementById('gallery-container').innerHTML = `<img class="fade-in" src="${imgFullPath}" alt="艺术画廊作品">`;
}

window.addEventListener('load', loadRandomGalleryImg);
setInterval(loadRandomGalleryImg, 30 * 1000);
</script>

内容的提问来源于stack exchange,提问作者Clara Miller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 09:33:03