一个django项目 - 根据域提供不同的内容

时间:2014-08-26 08:37:06

标签: python django django-sites

我似乎在使用django的site框架。 :)但是。这里我不明白:

如何编写动态视图以检查当前域并向该域呈现正确的内容

我所做的是:(我有一个带有单个settings.py的django项目)

  1. 创建了2个额外settings__domainname.py个文件,其中SITE_ID设置为db中的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')
    
  3. 我正在运行开发服务器,如./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)
    

    这有意义吗?像往常一样,Aaand非常感谢任何反馈。

1 个答案:

答案 0 :(得分:2)

您可以编辑hosts文件(unix,mac或C:/ windows / system32 / drivers / etc / hosts中的/ etc / hosts)并添加一些域名,如下所示:

127.0.0.1    domain-usa.com
127.0.0.1    domain-hun.com

之后,将dev服务器作为public运行(python manage.py runserver 0.0.0.0:8000) 并转到网址http://domain-usa.com:8000/

get_current_site在您的设置中查看SITE_ID,但您需要获取request.META['HTTP_HOST']变量,并从中获取域名。