Django - Попросите пользователей подтвердить изменение PDF-файла

У меня вопрос по поводу 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>

Но это также выводит предупреждение при первой загрузке, когда пользователь ничего не меняет.

Я предполагаю, что вы отображаете HTML в представлении django с помощью команды render(request, 'simple_upload.html').

Команда render принимает в качестве третьего параметра объект context, в котором можно хранить информацию, используемую в шаблоне. В этом контексте нужно написать, существует ли уже 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 %}

Сценарий отображается в HTML только тогда, когда PDF уже существует, и предупреждение не может быть показано при первой загрузке, когда пользователь ничего не меняет.

Надеюсь, это поможет.

Вернуться на верх