Один проект django - рендеринг разного контента в зависимости от домена

Я, кажется, использую Джанго site фреймворк.:) НО. вот что я не понимаю

Как написать динамические представления для проверки текущего домена и отображения правильного содержимого в этом домене

что я сделал: (у меня есть один проект Django с одним settings.py)

  1. создано 2 дополнительных settings__domainname.py файлы с SITE_ID установить соответствующий идентификатор объекта сайта в дБ
  2. ввиду:

    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'] переменная, и получить домен из нее.

Другие вопросы по тегам