【发布时间】:2014-08-26 08:37:06
【问题描述】:
我似乎在使用 django 的 site 框架。 :) 但。这是我不明白的:
如何编写动态视图来检查当前域并向该域呈现适当的内容
我所做的是:(我有一个带有单个 settings.py 的单个 django 项目)
- 创建了 2 个额外的
settings__domainname.py文件,其中SITE_ID设置为 db 中 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')
我正在像./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