@ffpenski

Как лучше создать версии сайта для разных городов в Django?

Хочу создать версии сайта для разных городов в Django, но по сути все процессы в разных городах будут одинаковыми, за исключением названий объектов. Необходимо, чтобы при переходе со страницы города на любую другую страницу сайта, пользователь мог вернуться обратно на страницу того же города, кликая по Лого ( Есстественно при смене города возврат должен происходить на страницу уже другого города)
Из вариантов реализации рассматриваю
1) создать app для каждого города
2) реализовать через сессии в одном app

Второй пункт уже пробовал, но возникла проблема - URL (находящийся в base.html), который активируется при клике на Лого повязан на template-tag сессии с переменной города. На странице же города ссылка с Лого работает, но уже при переходе на любую другую страницу ссылка перестаёт работать...

Также хотел бы услышать другие возможные варианты реализации)
  • Вопрос задан
  • 511 просмотров
Решения вопроса 1
Делать app для каждого города и копировать весь код, учитывая, что он одинаковый? нет смысла.

Лучше рассмотреть проблему иначе. Начнём с зарегистрированных пользователей. Создайте модель City, обозначающую город. Также создайте custom user profile model под названием, скажем, Profile, которая привязана к User отношением one to one. В модели Profile добавьте внешний ключ на City.

Наконец, реализуйте:
  • Выбор города (можно через AJAX)
  • Вывод на каждой странице сайта только той информации, что соответствует выбранному в request.user.profile.city городу.


Если же поддержка города нужна и для анонимных пользователей (скорее всего это так), то стоит использовать переменную сессии в качестве дополнительного слоя. В одном из проектов у меня это делается так:

  1. Если есть переменная сессии, то используется она для фильтрации всего и вся
  2. Если её нет, но пользователь зарегистрирован - то берётся значение из БД и сохраняется в сессию, далее как в первом пункте
  3. Если и того нет - у меня запрещён доступ, так надо; ну а у вас пользователю (в вашем случае) надо предложить выбрать значение из списка.


Таким образом и анонимусы поддерживаются, и при сбросе сессии у зарегистрированного юзера не теряется выбранный вариант.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы