Делать app для каждого города и копировать весь код, учитывая, что он одинаковый? нет смысла.
Лучше рассмотреть проблему иначе. Начнём с зарегистрированных пользователей. Создайте модель
City, обозначающую город. Также создайте custom user profile model под названием, скажем,
Profile, которая привязана к User отношением one to one. В модели
Profile добавьте внешний ключ на
City.
Наконец, реализуйте:
- Выбор города (можно через AJAX)
- Вывод на каждой странице сайта только той информации, что соответствует выбранному в request.user.profile.city городу.
Если же поддержка города нужна и для анонимных пользователей (скорее всего это так), то стоит использовать переменную сессии в качестве дополнительного слоя. В одном из проектов у меня это делается так:
- Если есть переменная сессии, то используется она для фильтрации всего и вся
- Если её нет, но пользователь зарегистрирован - то берётся значение из БД и сохраняется в сессию, далее как в первом пункте
- Если и того нет - у меня запрещён доступ, так надо; ну а у вас пользователю (в вашем случае) надо предложить выбрать значение из списка.
Таким образом и анонимусы поддерживаются, и при сбросе сессии у зарегистрированного юзера не теряется выбранный вариант.