在同一实例上支持不同的前端模板/静态

django_layers的Python项目详细描述


django layers
==


这个包提供了对模板和静态资源的"层"的支持
,这些资源可以根据请求上下文进行选择。


警告:下面记录的api在版本1.0之前可能会发生显著变化

为什么?
---


使用层,您可以根据不同的上下文提供可选的模板集("皮肤")
。例如,使用同一个cms,您可以从一个代码库中承载不同的前端设计,在同一个实例中拥有不同的访问者/管理员前端,进行a/b测试等,因此每个实例都没有单独的运行具有自己设置的.py配置的实例。



怎么做?
----


然后将"layers.middleware.layerloadermiddleware"添加到
中间件类中,例如


中间件类=(
"layers.middleware.layerloadermiddleware",



"ayers.loader.layerloader"位于模板加载程序的顶部,比任何其他/django加载程序都早。例如,

template\u loaders=(
'layers.loader.layerloader',
'django.template.loaders.filesystem.loader',
'django.template.loaders.app_directories.loader',


添加"layers.finders.applayerfinder"作为第一个静态文件查找程序:


staticfiles\u finders=(
"layers.finders.applayerfinder",
"django.contrib.staticfiles.finders.filesystemfinder",
"django.contrib.staticfiles.finders.appdirector"iesfinder',



,并定义您拥有哪些层以及需要收集到哪些层来


layers={
"visitor-a":静态的"根"+"/visitor-a",
"visitor-b":静态的"根"+"/visitor-b"



创建与以前相同的模板,而不是(或在上面)将它们存储在包的模板文件夹中,将它们存储在名为
"layers/**layername**/templates"的文件夹中。

例如,您可以有

mypackage/templates/mypackage/foo.html
mypackage/layers/visitor-a/templates/mypackage/foo.html
mypackage/layers/visitor-b/templates/mypackage/foo.html

n要使用的层,例如

def get_layer(请求):
if request.get_host().startswith("a"):
return"visitor-a"
if request.get_host().startswith("b"):
return"visitor-b"



r"可调用,只要返回
一个层或不返回任何内容。

----

您还可以为每个层提供一些全局共享配置。由于所有
层都将共享相同的settings.py,因此无法将其用于
层特定配置。

这只会返回一个dict,其中包含每个层的特定于层的数据。


例如


def get_config():
返回{visitor-a':dict(site_id=1,mailto='visitor-a@example.com'),
'visitor-b':dict(site_id=2,mailto='visitor-b@example.com')
}

然后您可以使用"获取当前层"访问当前层的配置:


from layer s.middleware import获取当前层

def myview(请求):
layer=get_current_layer()
return somemodel.objects.filter(site_id=layer['site_id'])


django_layers将扫描所有包进行配置,必要时将
配置字典合并在一起。

es每层
----


您可以将每层静态存储在安装在应用程序中的任何应用程序
layers/**layername**/statics文件夹中,例如,您可以有


mypackage/static/css/foo.css
mypackage/layers/visitor-a/static/css/foo.css
mypackage/layers/visitor-b/static/css/foo.css

.css否则。



静态资源由django"runserver"命令或在应用程序前面运行的web服务器提供。

django椆u layers提供升级的"runserver"命令,该命令知道根据活动层提供哪些静态资源。它还附带了一个
"collectlayers"命令,可以将这些层收集到不同的静态文件夹中,
类似于"collectstatic"的工作方式。在"layers"settings.py设置定义的
位置收集哪个层。


例如,给定前面的层定义



d将全局静态资源
和visitor-b特定资源的另一个副本放入static_root+'/visitor-b'

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

推荐PyPI第三方库


热门话题
spring boot+react+mysql连接器上的java构建失败?   java如何从动态标题/文本中仅提取数字?   Eclipse java类在方法注释后插入新行   java是否在makefiles文档中指定了两次编译?   java在Spring拦截url配置中,ROLE_USER和ROLE_ANONYMOUS之间有什么区别?   sql上相同参数的java多值   java将安卓应用程序连接到本地MS SQL数据库   java在运行时收到谓词函数的名称时,如何将一个函数作为谓词传递给另一个函数?   java Lambda输入文件到数组中   java如何在数组中搜索元素?以及如何将声明了方法的变量添加到数组列表中?   java如何按列对分布在众多json文件中的数据进行分组   安装pyjnius时发生java错误,未找到“jni.h”。(操作系统X 10.10.1)   java Android:CursorIndexOutOfBoundsException:请求索引0,大小为0,站点上没有答案   java My应用程序不回退IBM MQ消息   JAVAutil。扫描器Java扫描器或缓冲读取器   java缩短开关盒方法   java获取当前文件夹中的可用空间   Java属性绑定   java如何制作注释类型的AnnotationProcessor测试*子类型*?