Есть ли способ создать кнопку "Назад" в Django, которая понимает древовидную структуру?
У меня есть сайт на Django, который выглядит следующим образом:
Стрелки представляют собой гиперссылки, которые ведут на следующую страницу. Все страницы, кроме Главной, нуждаются в кнопке "Назад".
Для страниц A и B кнопка назад довольно проста - она всегда переводит вас на главную страницу.
Однако для страницы C существует 2 различных способа попасть на нее (технически 3, если считать кнопку "Назад" на странице D), поэтому больше не очевидно, куда должна вести кнопка "Назад".
Как это должно работать:
- Если пользователь перешел со страницы A на страницу C, кнопка Back должна вернуть его на страницу A .
- Если пользователь перешел со страницы B на страницу C, кнопка Back должна вернуть его на страницу B .
- Если пользователь не переходил ни со страницы A, ни со страницы B, чтобы попасть на страницу C (он мог просто ввести URL страницы C в свой браузер), кнопка "Назад" должна по умолчанию возвращать его на страницу A .
Об этом уже спрашивали раньше, и ни один из ответов/предложений не имеет смысла ни для чего, кроме самого базового сценария, где страница C является конечным узлом.
Проблема:
- Использование жестко закодированного url для кнопки "назад" страницы C не будет работать, потому что есть 2 способа добраться до нее .
- Использование
session
для хранения одной переменной, которая отслеживает, посетили ли вы в последний раз страницу A или страницу B, не будет работать, потому что несколько вкладок браузера используют одни и те же переменные сессии. Если у пользователя открыты 2 вкладки нашего сайта, то навигация по ним приведет к путанице, так как обе будут обновлять одну и ту же переменную сессии .
- Использование
request.META.HTTP_REFERER
не будет работать, потому что пользователь может перейти на страницу D, а затем вернуться на страницу C, поэтому переменнаяHTTP_REFERER
будет указывать на страницу D, а не на страницу A или B .
- Использование
javascript:history.go(-1)
не сработает - та же проблема, что и выше сHTTP_REFERER
Я сталкивался с этой проблемой в нескольких проектах, и это всегда неприятно. Решение всегда халтурное. Является ли это проблемой, которая по своей природе не может быть решена Django, и должна быть решена чем-то вроде JavaScript's sessionStorage
?