在同一实例上支持不同的前端模板/静态
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'
==
这个包提供了对模板和静态资源的"层"的支持
,这些资源可以根据请求上下文进行选择。
警告:下面记录的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'