gpt4 book ai didi

django - 如何在夹层 Multi-Tenancy 中启用每个站点模板

转载 作者:行者123 更新时间:2023-12-02 09:48:31 25 4
gpt4 key购买 nike

我们正在将业务扩展到欧洲,我正在使用 Mezzanine 的 Multi-Tenancy 功能在同一个 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 使用相应主题/应用目录中的模板来渲染页面?

最佳答案

深入研究 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 使用 session 变量 site_id但显然没有沿着这个特定的模板渲染代码路径。

解决方案因此只需使用以下内容编辑我的 /etc/hosts 文件:

127.0.0.1 domain.eu

现在,当我访问 domain.eu/locations 时,它会从正确的主题目录(在本地开发环境中)呈现模板

关于django - 如何在夹层 Multi-Tenancy 中启用每个站点模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29500710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com