跳转到主要内容

为feincms3提供多站支持

项目描述

CI Status

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)

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分布

feincms3_language_sites-0.3.0.tar.gz (14.6 kB 查看散列)

上传时间

构建分布

feincms3_language_sites-0.3.0-py3-none-any.whl (9.7 kB 查看散列)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面