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