2

我正在使用 Django 开发一个网站,我们在其中列出产品和一些评论。我想为具有不同产品对象的每个国家/地区建立单独的站点。例如:

us.domain.com - 列出了美国的产品,页面为英文。

fr.domain.com - 列出了法国的产品,页面为法语等。

1)我想到的是根据中间件中请求的子域更改 settings.SITE_ID ,但这据说很危险。我还可以做些什么?我不想为每个国家/地区运行单独的实例或 settings.py 文件。

到目前为止我的解决方案:

class SubdomainMiddleware:
    def process_request(self, request):
        host = request.META.get('HTTP_HOST', '')
        try:
            site = Site.objects.get(domain=host)
        except:
            site = Site.objects.get(domain='www.domain.com')
        request.site = site

products = Product.objects.filter(site_id=request.site)

在这里,下面不起作用,因为 CurrentSiteManager 使用 settings.SITE_ID,而不是 request.site:

on_site = CurrentSiteManager()

Product.on_site.all()

我必须在每个查询中明确传递 site_id=request.site 。这是安全的,还是有其他选择?

2)如果我将 site = models.ForeignKey(Site) 字段添加到 Product 模型中,就足够了吗?或者我应该将该字段添加到所有其他模型,如评论等?

4

0 回答 0