为feincms3提供多站支持
项目描述
Multisite支持feincms3。
使用场景
假设您有一个网站,具有多个域名和语言,但它们之间没有确切的1:1映射。Django提供了django.contrib.sites应用程序来分区数据,但您仍然需要为每个站点运行一个web服务器。
此应用程序提供了一种feincms3抽象页面模型、一个中间件和用于支持此场景的实用工具。与feincms3-sites不同,后者更加灵活,允许任意组合语言和域名,此应用程序仅允许每个语言恰好有一个域名,每个域名恰好有一个语言。
安装
在已使用feincms3页面的环境中使用pip install feincms3-language-sites安装此包。
替代 feincms3.pages.AbstractPage,扩展 feincms3_language_sites.models.AbstractPage。这个抽象页面已经扩展了 feincms3.mixins.LanguageAndTranslationOfMixin,所以你可以移除语言混入(如果你之前添加过的话)。
将 LocaleMiddleware 替换为 feincms3_language_sites.middleware.site_middleware。如果你正在使用 feincms3 应用程序,你应该确保在 feincms3.applications.apps_middleware 之前添加 site_middleware。
可选地添加 feincms3_language_sites.middleware.redirect_to_site_middleware,如果你想要强制执行 host。同时也会尊重 SECURE_SSL_REDIRECT。必须将 redirect_to_site_middleware 添加到 SecurityMiddleware 之前,否则用户可能会连续两次被重定向。
配置站点。
配置
可能的配置
SITES = {
"de": {
"host": "127.0.0.1:8000",
"host_re": r"example\.com$|127.0.0.1:8000$",
},
"fr": {
"host": "localhost:8000",
},
}
站点将按照它们声明的顺序进行检查(因为从 Python 3.7 开始,字典保证了键的顺序)。
SITES 字典的键必须等于 LANGUAGES 中的所有语言代码。需要 host,并且应该只包含主机和可选端口,不包含其他内容。如果提供了 host_re,则将 request.get_host() 返回值与 host_re 正则表达式进行匹配,否则 host 必须完全匹配。
如果没有任何站点匹配当前请求,site_middleware 会自动抛出 DisallowedHost 异常(这会产生与 Django 相同的错误,如果请求不匹配 ALLOWED_HOSTS)。
工具
feincms3_language_sites.models.site_for_host
feincms3_language_sites.models.reverse_language_site_app
feincms3_language_sites.templatetags.feincms3_language_sites.site_translations
注意
请注意,Page.objects.active() 仅返回当前语言中的页面。如果你想要生成翻译链接(例如在模板中使用 ...|translations),你不想使用 .active() 查询集方法,而是构建自己的东西,该东西运行 .filter(is_active=True)。
项目详情
下载文件
下载适合您平台文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。
源分布
构建分布
哈希值 for feincms3_language_sites-0.3.0-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e3396bb04cd92ebe257c297b0e277a7e9658cdb92ceee0c65da057c99e58c929 |
|
MD5 | ea73c9a03c5d31d60ae0497cb983fea7 |
|
BLAKE2b-256 | 743ad9e8bfb0c1b2939bfbc403e3fb745fe659f08d4bae2f84e4189b4cd00834 |