Один проект django - рендеринг разного контента в зависимости от домена
Я, кажется, использую Джанго site
фреймворк.:) НО. вот что я не понимаю
Как написать динамические представления для проверки текущего домена и отображения правильного содержимого в этом домене
что я сделал: (у меня есть один проект Django с одним settings.py)
- создано 2 дополнительных
settings__domainname.py
файлы сSITE_ID
установить соответствующий идентификатор объекта сайта в дБ ввиду:
if get_current_site(self.request).domain == "domain-usa.com": context['allnews'] = News.objects.filter(country='USA') elif get_current_site(self.request).domain == "domain-hun.com": context['allnews'] = News.objects.filter(country='Hungary')
Я использую сервер dev как ./manage.py runserver --settings=myproj.settings_domainname
Но я все равно жестко программирую, я хочу, чтобы мои взгляды проверяли и получали контент полностью динамически без какого-либо жесткого кодирования.
Как мне этого добиться? Я пытаюсь упростить жизнь моих коллег (которые могут захотеть создать новый домен через администратора) и моей (приходится жестко кодировать в представлениях).
Любое руководство с благодарностью.
РЕДАКТИРОВАТЬ - почти решение:.
Я расширил модель сайта следующим образом:
class CustomSite(models.Model):
sites = models.OneToOneField(Site, null=True, related_name='customsite')
COUNTRY_CHOICES = (
('en', 'USA'),
('de', 'Germany'),
('es', 'Spain'),
('ru', 'Russia'),
('fr', 'French')
)
country = models.CharField(max_length=3, choices=COUNTRY_CHOICES)
def __unicode__(self):
return 'Country of {0}'.format(self.sites.domain)
и с учетом, я могу сделать:
country_ofdomain = get_current_site(self.request).customsite.country
news_for_this_country = News.objects.filter(country=country_ofdomain)
Имеет ли это смысл? Ааа, как обычно, любая обратная связь с благодарностью.
1 ответ
Вы можете редактировать себя hosts
файл (/etc/hosts в unix, mac или C:/windows/system32/drivers/etc/hosts в windows) и добавьте несколько доменов, например:
127.0.0.1 domain-usa.com
127.0.0.1 domain-hun.com
после этого запустите dev server как открытый (python manage.py runserver 0.0.0.0:8000) и перейдите по ссылке http://domain-usa.com:8000/
get_current_site
посмотрите на SITE_ID в ваших настройках, но вам нужно получить request.META['HTTP_HOST']
переменная, и получить домен из нее.