用于TurboGears2的Coffeescript中间件
tgext.coffeescript的Python项目详细描述
关于tgext.coffeescript
CoffeeScript是一种编译成javascript的小语言。在所有这些下面 笨拙的大括号和分号,javascript的核心总是有一个华丽的对象模型。 CoffeeScript试图以简单的方式公开javascript的好部分。
tgext.coffeescript是一个旨在使 TurboGears2开发更简单,tgext.coffeescript转换普通咖啡 使用官方coffeescript编译器将文件转换为javascript。
Tgext.coffeescript基于Alessandro Molina的tgext.scss,是 在同一个许可证下(麻省理工学院)。
安装
tgext.coffeescript既可以从pypi安装,也可以从bitbucket安装:
easy_install tgext.coffeescript
您还需要安装coffeescript编译器,有关说明,请查看他们的网站。
启用tgext.coffeescript
使用tgext.coffeescript非常简单,您可以编辑config/middeware.py然后 在此处使用自定义中间件包装您的基本TurboGears 2应用程序 应用程序带有咖啡脚本中间件:
from tgext.coffeescript import CoffeeScriptMiddleware make_base_app = base_config.setup_tg_wsgi_app(load_environment) def make_app(global_conf, full_stack=True, **app_conf): app = make_base_app(global_conf, full_stack=True, **app_conf) # Wrap your base TurboGears 2 application with custom middleware here app = CoffeeScriptMiddleware(app) return app
现在您只需将.coffee文件放入public/javascript中,它们将作为javascript提供服务。
javascript压缩
coffeescript支持通过slimit或jsmin缩小javascript输出作为回退,这个函数是 默认情况下禁用,可以通过在构造函数上传递参数minify=true来启用:
app = CoffeeScriptMiddleware(app, minify=True)
缓存后端
您可以将缓存后端存储更改为任何可以序列化dict对象的dict类对象, 例如,可以通过将缓存对象传递给中间件构造函数来使用烧杯缓存:
from tgext.coffeescript import CoffeeScriptMiddleware from tg import cache make_base_app = base_config.setup_tg_wsgi_app(load_environment) def make_app(global_conf, full_stack=True, **app_conf): app = make_base_app(global_conf, full_stack=True, **app_conf) # CoffeeScript with beaker cache backend app = CoffeeScriptMiddleware(app, cache=cache) return app
编译器选项
目前,tgext.coffeescript默认情况下会打开–bare编译器选项,这意味着生成的javascript 输出将不是顶级函数下的包装器,如果您要反转此行为,可以告诉 禁用它的中间件:
app = CoffeeScriptMiddleware(app, bare=False)
这将对tgext.coffeescript提供的所有文件禁用裸选项,对该选项进行更细粒度的控制 以后可能会根据需要提供。
Jinja2分机
coffeescript为jinja2模板提供了一个扩展,用于编译直接嵌入到 模板。要激活它,只需在config/app_config.py文件中添加以下内容:
from tgext.coffeescript.jinja import CoffeeExtension base_config.jinja_extensions = [CoffeeExtension]
现在您可以在模板中使用咖啡标签:
<style type="text/javascript"> {% coffee "main" %} console.log state for state in ['open', 'close', 'full'] {% endless %} </style>
其中“main”是那个coffeescript部分的唯一标识符,它应该输出如下:
<style type="text/javascript"> var state, _i, _len, _ref; _ref = ['open', 'close', 'full']; for (_i = 0, _len = _ref.length; _i < _len; _i++) { state = _ref[_i]; console.log(state); } </style>