我正在尝试制作动态背景,该背景每x秒更改一次图像。但是我希望图像从django项目中的目录中获取。我有这段代码,但是经过硬编码和限制。
var header = $('body');
var backgrounds = new Array(
'url(static/media/backgrounds/1.jpg)'
, 'url(static/media/backgrounds/2.jpg)'
, 'url(static/media/backgrounds/3.jpg)'
, 'url(static/media/backgrounds/4.jpg)'
, 'url(static/media/backgrounds/5.jpg)'
, 'url(static/media/backgrounds/6.jpg)'
, 'url(static/media/backgrounds/7.jpg)'
, 'url(static/media/backgrounds/8.jpg)'
, 'url(static/media/backgrounds/9.jpg)'
, 'url(static/media/backgrounds/10.jpg)'
);
var current = 0;
function nextBackground() {
current++;
current = current % backgrounds.length;
header.css('background-image', backgrounds[current]);
}
setInterval(nextBackground, 5000);
header.css('background-image', backgrounds[0]);
答案 0 :(得分:1)
首先,您需要枚举所需的图像。对于简单的部署,静态文件将位于文件系统上(在STATIC_ROOT
中,并从/static/
下进行服务,类似
# Get absolute disk paths of files
backgrounds = glob.glob(os.path.join(settings.STATIC_ROOT, 'media', 'backgrounds', '*.jpg'))
# Turn into URLs
background_urls = [f'/static/media/backgrounds/{os.path.basename(bg)}' for bg in backgrounds]
会做;要获得更强大的解决方案,您可能希望使用staticfiles finders API枚举所有文件并将它们转换为URL。
为了将数据提供给您的视图,我可以想到几个选择。
{{ background_urls|json_script:"backgrounds" }}
var backgrounds = ["/static/foo.jpg"];
<script src="{% url "background_list_js" %}"></script>
["/static/foo.jpg"]
fetch()
或其他AJAX方法可在开始更改背景之前加载数据{"url": "/static/foo.jpg"}
fetch()
或其他AJAX方法来在您每次需要新背景时加载数据。<script>{% dump_backgrounds %}</script>