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);
})();
Недостатками этого подхода являются:
- Опрос увеличивает сетевой трафик
- Вы загружаете страницу дважды.
Преимущество в том, что вы можете сделать страницу результатов параметром, тогда пользователь может закрыть страницу, вернуться позже и продолжить ждать.