如何在Django模板中显示图片?
我在用Django开发一个项目。在模板中,我想放一张图片,如果用户想换照片,只需要点击已经显示的图片,这样就会打开文件浏览器,用户可以选择新的图片。然后,新的图片应该暂时替换掉旧的图片,在模板中显示出来。
程序确实打开了文件浏览器,我选择了新的图片,但旧的图片没有被替换,新的图片也没有在HTML的任何地方显示出来。我的代码是:
<script>
// Quando a imagem da pessoa for clicada
document.getElementById("imagem-pessoa").addEventListener('click', function() {
// Abrir o explorador de arquivos ao clicar no campo de arquivo oculto
document.getElementById("input-imagem").click();
});
// Quando uma nova imagem for selecionada
document.getElementById("input-imagem").addEventListener('change', function(event) {
// Capturar a nova imagem selecionada
const novaImagem = event.target.files[0];
// Atualizar temporariamente a imagem no HTML
const urlNovaImagem = URL.createObjectURL(novaImagem);
document.getElementById("imagem-pessoa").src = urlNovaImagem;
});
</script>
还有HTML部分:
<img class="rectangle" id="imagem-pessoa" src="{{ pessoa.imagem.url }}" alt="Imagem da Pessoa">>
<input type="file" id="input-imagem" style="display: none;" accept="image/*">
这个功能没有正常工作。
我期待的效果是:加载一个人员注册页面,输入一个号码后,它会在数据库中查找并返回一个人。然后,它会用从数据库表中找到的数据填充屏幕上的一些元素。在人员模型对象中,有一个模型字段是ImageField,用来存储每个人的照片。我需要的是:在HTML中展示与被搜索的人员(在人员表中)相关的图片,同时,如果用户想更换照片,只需点击已经显示的图片,就会打开文件浏览器,让用户选择新的图片。一旦选择了新的图片,新的图片应该暂时替换掉旧的图片显示在HTML中,但只有在用户点击提交按钮后,数据库中的照片才会被真正替换。
2 个回答
0
在index.html文件中试试这个代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<img class="rectangle" id="imagem-pessoa" src="{{ pessoa.imagem.url }}" alt="Imagem da Pessoa">
<input type="file" id="input-imagem" style="display: none;" accept="image/*">
<script>
// Quando a imagem da pessoa for clicada
document.getElementById("imagem-pessoa").addEventListener('click', function() {
// Abrir o explorador de arquivos ao clicar no campo de arquivo oculto
document.getElementById("input-imagem").click();
});
// Quando uma nova imagem for selecionada
document.getElementById("input-imagem").addEventListener('change', function(event) {
// Capturar a nova imagem selecionada
const novaImagem = event.target.files[0];
// Atualizar temporariamente a imagem no HTML
const urlNovaImagem = URL.createObjectURL(novaImagem);
document.getElementById("imagem-pessoa").src = urlNovaImagem;
});
</script>
</body>
</html>
0
我已经解决了这个问题。
要在Django的模板HTML中实现这个功能,可以参考以下代码:
'use strict'
let photo = document.getElementById('imgPhoto');
let file = document.getElementById('flImage');
photo.addEventListener('click', () => {
file.click();
});
file.addEventListener('change', () => {
if (file.files.length <= 0) {
return;
}
let reader = new FileReader();
reader.onload = () => {
photo.src = reader.result;
}
reader.readAsDataURL(file.files[0]);
});
<div class="marg">
<div class="maxSize">
<div class="imageContainer">
<img style="object-fit:cover;" src="{{ pessoa.imagem.url }}" alt="Imagem da Pessoa" id="imgPhoto">
</div>
</div>
<input type="file" id="flImage" name="flImage" accept="image/*">
</div>