我们正在将业务扩展到欧洲,并且我使用Mezzanine的多租户功能在同一个Django安装上托管美国和欧盟版本的网站。根据{{1}},我们在每个网站上都有一个/locations
页面,我希望根据不同的模板提供这些页面。
我已关注Mezzanine的稀疏文档here并将以下内容添加到SITE_ID
settings.py
我已在基本主题之后将HOST_THEMES = [
('domain.com', 'domain_app'),
('domain.eu', 'domain_eu')
]
添加到domain_eu
,并使用INSTALLED_APPS
生成目录并手动创建python manage.py startapp domain_eu
文件。
然后我复制了位置页面并将其分配到EU网站。
页面仍然使用位于基本主题中的位置模板进行渲染 domain_eu/templates/pages/locations.html
我已确认在请求中设置了正确的domain_app/templates/pages/locations.html
。
如何根据当前SITE_ID
答案 0 :(得分:3)
在深入了解Mezzanine的代码后,我弄清楚为什么我的eu主题模板没有渲染。代码的关键部分可以在mezzanine/utils/sites.py
def host_theme_path(request):
"""
Returns the directory of the theme associated with the given host.
"""
for (host, theme) in settings.HOST_THEMES:
if host.lower() == request.get_host().split(":")[0].lower():
当我记录request.get_host()
的结果时,我很快意识到了问题,因为它localhost
显然与任何HOST_THEMES
域都不匹配。
我曾假设Mezzanine会根据their documentation使用会话变量site_id
,但显然不会忽略此特定模板呈现代码路径。
解决方案因此只需使用以下内容编辑我的/etc/hosts
文件:
127.0.0.1 domain.eu
现在,当我访问domain.eu/locations
时,它会从正确的主题目录(在本地开发环境中)呈现模板