django的租户感知模板。

django-tenant-templates的Python项目详细描述


django的租户感知模板。

概述

租户是一组运行的应用程序配置和行为 以及同一服务器进程中的其他租户。

构建多租户web应用程序的首要挑战之一是加载 为每个租户提供不同的模板,而不会让开发人员的生活更加艰难。 django租户模板提供了在django中制作模板的实用程序 不妨碍Django正常开发的租户意识。

安装和使用

从pypi安装django租户模板

pip install django-tenant-templates

将租户中间件类添加到django设置:

MIDDLEWARE_CLASSES = (
    ...
    'django_tenant_templates.middleware.TenantMiddleware',
    ...
)

添加一个或多个租户模板加载程序。它们应该放在 标准Django装载机:

TEMPLATE_LOADERS = (
    'django_tenant_templates.loaders.TenantFileSystemLoader',
    ...
)

现在你只需要在之前的某个地方设置请求。 调用TenantMiddleware,并将特定于Tenant的模板放入 一个子目录,其名称为request.tenant_slug的值。

之后,所有模板名称都将以request.tenant_slug作为前缀 还有一个正斜杠。如果request.tenant_slug是“我的房客”, “customers/customer_list.html”变成 “我的房客/客户/客户列表.html”

要返回到非租户模板加载,请确保包含其他 模板加载程序位于settings.template\u loaders中的租户加载程序之后。

如果要显式加载非租户模板,请在模板名称前加前缀 带有“./”。这允许您扩展具有相同名称的非租户模板 作为租户模板,它可以用于仅重写 基本模板的一部分,而不是替换整个模板。

中间件

触发器警告:此部分包含对线程局部变量的引用。

django_tenant_templates.middleware.tenantmiddleware类是 租户模板加载程序工作。它查找请求。租户的slug 将其放在线程本地存储中。模板加载程序然后使用 在本地线程中查找模板。

如何获得分配给请求的值取决于您, 但它应该是您正在使用的任何文件系统的有效目录名。 例如:

# Middleware that runs before TenantMiddleware
class ExampleMiddleware(object):
    def process_request(self, request):
        # Get the tenant slug from an HTTP header.
        request.tenant_slug = request.META.get('HTTP_X_TENANT_ID', None)

您可以使用 自定义子类:

class CustomTenantMiddleware(TenantMiddleware):
    slug_attribute_name = 'fart'

django租户模板的模板加载程序将使用 请求,放屁,作为房客的鼻涕虫。

装载机

django租户模板提供了一些与 Django提供的装载机。他们都住在 django_tenant_templates.loaders模块。

每个加载器做的基本上是相同的事情:租户slug的前缀是 模板名称,然后正常查找模板。例如,如果 租户slug是“我的租户”,模板名customers/customer\u list.html 将被翻译为my廑tenant/customers/customer廑list.html

租户文件系统加载程序

使用settings.template目录查找模板。见 django.template.loaders.filesystem.loader

租户加载程序

在每个已安装的应用程序中查找模板。见 django.template.loaders.app_directories.loader

< H3>

一个添加租户意识到模板加载的MIXIN。使用此创建 自定义模板加载程序。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何下载多个。java中的PDF文件   linux Java打开文件,形成实际用户主页~/   java如何在时间线内维护TableView选择?   java Hibernate注释@Where vs@WhereJoinTable   Java读/写访问异常FileNotFoundException(访问被拒绝)   继承在Java中是否可以扩展最后一个类?   Android HttpClient使用java使应用程序崩溃。lang.OutOfMemoryError:pthread_create   java为什么即使我在proguardproject中添加了jar文件,也会出现这种错误。txt?   如果添加JButton,swing Java FocusListener和KeyListener将无法工作   java使用solrj检索json格式的SolrDocument   使用Microsoft Visual Studio代码进行Java编程   java NoClassDefFoundError:org/apache/log4j/Logger   哈希集中包含相等对象的java   java中的参数化构造函数是否需要有一个主体?   java类似于NetBeans不必要的代码检测器   Java实践问题   java Blackberry“[projectname].调试文件丢失”和“I/O错误:找不到程序”jar