1

我似乎正在使用 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')
    

我正在运行开发服务器./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 像往常一样,非常感谢任何反馈。

4

1 回答 1

2

你可以编辑你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

在此之后,以公共身份运行开发服务器(python manage.py runserver 0.0.0.0:8000)并转到 url http://domain-usa.com:8000/

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

于 2014-08-26T09:04:45.180 回答