我有一个关于Fileupload的问题。我得到了一个表单,用户可以上传pdf文件并更改上传的pdf文件。当他们更改PDF时,我想添加一个警告,让他们确认PDF更改。你知道最好的方法是什么吗?
现在,我正试图解决它与JS在我的HTML,像这样:
<form enctype="multipart/form-data" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit">
<input class="deleter" type="submit" value="Delete">
{% include "some_html.html" %}
</form>
<script>
// Add event listener to change button
function confirmFileChange() {
var fileInput = document.getElementById('id_file');
fileInput.addEventListener('change', function() {
if (fileInput.value) {
if (!confirm('Are you sure you want to change the uploaded PDF?')) {
fileInput.value = '';
}
}
});
}
if (document.body.innerHTML.indexOf('Change: ') !== -1) {
confirmFileChange();
}
</script>
但是当用户没有更改任何内容时,这也会在第一次上传时显示警告。
我假设你用render(request, 'simple_upload.html')
这样的命令在django视图中呈现HTML。
呈现命令接受上下文对象作为第三个参数,您可以在其中存储可在模板中使用的信息。无论PDF是否已经存在,您都必须在此上下文中编写。
context = { 'pdf_already_exists': True if pdfAlreadyExists() else False }
render(request, 'simple_upload.html', context)
现在您可以在模板中计算PDF是否已经存在。
{% if pdf_already_exists %}
<script>
var fileInput = document.getElementById('id_file');
fileInput.addEventListener('change', function() {
if (fileInput.value) {
if (!confirm('Are you sure you want to change the uploaded PDF?')) {
fileInput.value = '';
}
}
});
</script>
{% endif %}
当PDF已经存在时,脚本才会在HTML中呈现,并且当用户没有更改任何内容时,在第一次上传时无法显示警告。
我希望这对你有帮助。