如何在夹层多租户中启用每个站点的模板
How to enable per-site templates within Mezzanine multi-tenancy
我们正在将业务扩展到欧洲,我正在使用 Mezzanine 的多租户功能在同一个 Django 安装上托管美国和欧盟版本的站点。我们在每个网站上都有一个 /locations
页面,我想根据 SITE_ID
使用不同的模板提供服务。
我遵循了 Mezzanine 的稀疏文档 here 并将以下内容添加到 settings.py
HOST_THEMES = [
('domain.com', 'domain_app'),
('domain.eu', 'domain_eu')
]
我在基本主题之后添加了domain_eu
到INSTALLED_APPS
,并使用python manage.py startapp domain_eu
生成了目录并手动创建了domain_eu/templates/pages/locations.html
文件.
然后我复制了位置页面并将其分配给欧盟站点。
页面仍使用位于 基本主题 domain_app/templates/pages/locations.html
中的位置模板呈现
我已确认在请求中设置了正确的 SITE_ID
。
如何根据当前的SITE_ID
在相应的theme/app目录下使用模板渲染页面?
在深入研究 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
时,它会从正确的主题目录(在本地开发环境中)呈现模板
我们正在将业务扩展到欧洲,我正在使用 Mezzanine 的多租户功能在同一个 Django 安装上托管美国和欧盟版本的站点。我们在每个网站上都有一个 /locations
页面,我想根据 SITE_ID
使用不同的模板提供服务。
我遵循了 Mezzanine 的稀疏文档 here 并将以下内容添加到 settings.py
HOST_THEMES = [
('domain.com', 'domain_app'),
('domain.eu', 'domain_eu')
]
我在基本主题之后添加了domain_eu
到INSTALLED_APPS
,并使用python manage.py startapp domain_eu
生成了目录并手动创建了domain_eu/templates/pages/locations.html
文件.
然后我复制了位置页面并将其分配给欧盟站点。
页面仍使用位于 基本主题 domain_app/templates/pages/locations.html
我已确认在请求中设置了正确的 SITE_ID
。
如何根据当前的SITE_ID
在相应的theme/app目录下使用模板渲染页面?
在深入研究 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
时,它会从正确的主题目录(在本地开发环境中)呈现模板