Django доступ к имени/url сайта в шаблоне - представления, контексты и настройки
(Это похоже на вопросы типа "лучшие практики", извините, если они здесь не к месту)
Я создаю веб-сайт, который имеет функцию регистрации пользователя и сброса пароля, обе из которых отправляют электронное письмо пользователю со ссылкой, которую нужно нажать для завершения соответствующего процесса. Во время тестирования на промежуточной коробке я использовал грязный обходной путь, чтобы завершить Proof Of Concept - жестко закодировал адрес сайта в шаблоне ) Излишне говорить, что я хочу исправить это скорее раньше, чем позже. Поискав вокруг, нашел ссылки на django.contrib.sites, что выглядит как возможное решение, хотя одна вещь беспокоит меня - технически есть только один сайт, но с двумя стадиями, staging и production. Я не хочу плыть против течения, потенциально злоупотребляя "сайтами", где может быть применено другое решение.
Затем я рассмотрел другой подход - добавить соответствующие URL в соответствующие файлы settings.py, о которых у меня уже есть представление - одно для локального, одно для staging и одно для prod. Проблема здесь, вероятно, очевидна - я не думаю, что правильно (или возможно) читать settings.py из шаблонов, и, пытаясь сохранить решение как можно более простым, я использую несколько стандартных представлений, что означает, что у меня нет доступа к их коду, чтобы добавить значения в контекст. Возможно, я должен переопределить эти стандартные представления? Просто вызвать 'super' и затем добавить мои пользовательские данные в контекст? Но я не знаю, правильный ли это подход.
Третьим вариантом кажется добавление пользовательского контекстного процессора для достижения той же цели, т.е. сделать значения настроек доступными для шаблонов, которые в них заинтересованы. Извините за длинный вопрос "дизайнерского" сорта.
ок, так что это был неправильный путь - причина, по которой {{ domain }} в моем шаблоне не работал (разрешался в 'localhost'), была недостающая строка в конфигурации nginx:
location / {
proxy_pass http://unix:/run/gunicorn.sock;
proxy_set_header Host $http_host;
}
(строка proxy_set_header, если быть точным)
Не могу утверждать, что я на 100% понимаю, что здесь происходит, но по крайней мере теперь я могу двигаться вперед