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。
一个添加租户意识到模板加载的MIXIN。使用此创建 自定义模板加载程序。