【问题标题】:one django project - render different content depending on domain一个 django 项目 - 根据域呈现不同的内容
【发布时间】:2014-08-26 08:37:06
【问题描述】:

我似乎在使用 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 像往常一样,非常感谢任何反馈。

【问题讨论】:

    标签: python django django-sites


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,伙计。我想出了另一个奇怪的解决方案。我扩展了站点模型并放置了另一个名为country 的字段。哇,每一步都令人惊叹:D
    猜你喜欢
    • 2013-05-09
    • 2021-01-13
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多