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

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第三方库


热门话题
java计算器没有正确执行Bodma   java Make按钮只有在变量达到某个值时才可见,并且不起作用   java VF2子图同构   mysql数据库中的Java存储操作   java递归如何只在最后执行操作   java如何用HibernateXML文件映射字符串列表   java如何使用Maven导入Confluence API?   内存增加java堆大小,在windows中使用eclipse   安卓 Java字符串。replaceAll返回不同的结果   java如何将安全补丁放在文本视图上?   java如何使用Exchange Web服务(EWS)修复客户端协议异常   java单元数组方法返回   java如何在我的HealthIndicator返回时强制服务器发回HTTP错误500   java DateFormat到DateTimeFormatter   如何在java中将日历设置为特定的日期和时间   java获取字符串格式的相对日期时间   java Maven项目迁移STS v4   从一台服务器到另一台服务器的java POST请求