Есть ли способ создать кнопку "Назад" в Django, которая понимает древовидную структуру?

У меня есть сайт на Django, который выглядит следующим образом:

enter image description here

Стрелки представляют собой гиперссылки, которые ведут на следующую страницу. Все страницы, кроме Главной, нуждаются в кнопке "Назад".

Для страниц 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?

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