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

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组织。openqa。硒。遥远的UnreachableBrowserException如何定义EXE路径?   java Camel AdviceWith不使用指定文件替换端点   基于字符串的java图像加载   Java中的启发式算法,计算8个谜题状态的线性冲突   java为什么不支持文件。probeContentType返回null   JPA@EntityListeners、@PrePersist和Spring@RepositoryEventHandler、@HandleBeforeSave之间的java差异   可能前缀的Java字符串到字符串[]   安装rJava | Makefile时发生java错误。全部:38:target’libjri的配方。所以他失败了   Java公共静态void main()   java如何覆盖txt文件中的某些单词   java如何获得循环中生成的字符值之和?   java Log4j创建另一个具有相同属性的appender   java如何在从Axis2 Web服务客户端通过代理服务器调用Web服务时设置代理设置?   在Windows上安装Elasticsearch时发生java错误   java如何向EditText组件添加TextChangedListener?