Django перенаправляет на страницу, только если она существует

У меня есть приложение Python Django, над которым я работаю. Есть страница отправки, которая принимает некоторые данные от пользователя, и я трачу время на ее обработку с помощью потока. Эта обработка может занимать различное время, от одной минуты до 30 минут. Пока поток работает, я перенаправляю на страницу ожидания, но я хочу перенаправить с этой страницы ожидания на некоторую страницу вывода, когда поток обработки завершится.

Я могу заставить поток создать все необходимые изменения, т.е. создать шаблон страницы, добавить некоторый код в файл views.py и добавить путь к файлу urls.py, но я не уверен, как заставить этот редирект сработать.

Я полагаю, что общий вопрос здесь заключается в том, как я могу перенаправить на страницу в Django, только если она существует?

Одна из возможностей заключается в опросе страницы результатов. Когда он не возвращает 404, вы загружаете страницу. Этот ответ KyleMit на другой вопрос должен сработать в вашей ситуации. Чтобы адаптировать его код:

const poll = async function (fn, fnCondition, ms) {
  let result = await fn();
  while (fnCondition(result)) {
    await wait(ms);
    result = await fn();
  }
  return result;
};

const wait = function (ms = 1000) {
  return new Promise(resolve => {
    setTimeout(resolve, ms);
  });
};

(async() => {
    const url = "/result.html";
    let fetchResult = () => fetch(url);
    let validate = result => !result.ok;
    let response = await poll(fetchResult, validate, 3000);
    if (response.ok)
        location.replace(url);
    })();

Недостатками этого подхода являются:

  • Опрос увеличивает сетевой трафик
  • Вы загружаете страницу дважды.

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

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