Я преобразовываю сайт электронной коммерции в регион (например, США, ЕС), чтобы посетители воспринимали его как другой сайт в зависимости от контента, который они увидят, хотя на самом деле это один сайт (для многих причины). Большинство путей на моем сайте будут привязаны к региону благодаря префиксу региона в начале пути, например, «/us/» (однако я мог бы преобразовать все, если бы это значительно упростило задачу).
Мой план:
ПО промежуточного слоя идентифицирует регион на основе 1) пути запроса, 2) сеанса или 3) угадывания на основе IP-адреса в указанном порядке и устанавливается в объекте запроса. Кроме того, как только они используют региональный путь, он сохраняется как значение сеанса. Таким образом, контекст региона переносится по URL-адресам, не зависящим от региона.
Шаблоны URL, которые зависят от региона, должны быть обновлены, чтобы соответствовать региону, хотя я уже обнаружил регион в промежуточном программном обеспечении, поскольку логика была более сложной, чем просто путь. Тем не менее, я должен сделать его параметром и передать во все свои представления по следующей причине (реверсирование). Кроме того, любой путь, который становится региональным, будет иметь свои предыдущие шаблоны 301, перенаправляющие на свои региональные пути.
Чтобы генерировать ссылки, зависящие от региона, мне приходится обновлять многие вызовы reverse() и {% url %}, добавляя аргумент региона. Я бы хотел, чтобы здесь был какой-то слой, который я мог бы настроить для динамического изменения URL-адресов со знанием запроса.
Мой основной вопрос - лучший способ справиться с реверсом (последняя пуля). Такое ощущение, что много ненужной работы. Я открыт для лучших способов решения проблемы в целом.
Обновления:
- Я исключил поддомены, потому что известно, что они вредны для SEO и передачи полномочий. Кроме того, я думаю, что поддомены могут подразумевать совершенно разные настройки, тогда как сейчас я буду управлять этим как одним веб-приложением.
- Как указывает @RemcoGerlich, в основном я хочу добавить автоматическое поведение, которое LocaleMiddleware/i18n_patterns добавляет как в urlconf, так и в обратном порядке.