【问题标题】:Using Flask-Assets with Flask-Mako在 Flask-Mako 中使用 Flask-Assets
【发布时间】:2015-02-10 10:58:14
【问题描述】:

我想使用 flask-assets 来组织我的 webassets 和 mako 进行模板化。 Flask-assets 通常通过以下方式使用 jinja:

{% assets "js_all" %}
    <script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}

Mako 等价物(据我所知)如下:

    % assets 'coffee':
        <script type="text/javascript" src="{{ ASSET_URL }}"></script>
    % endassets

但是这会导致编译错误:

mako.exceptions.CompileException
CompileException: Unsupported control keyword: 'assets' in file '/index.html' at line: 8 char: 1

有没有办法在 Mako 中使用自定义控件关键字(如“资产”)?

这是我的 app.py 记录:

import os
from flask import Flask, render_template
from flask.ext import assets
from flask import config
from flask.ext.mako import MakoTemplates
from flask.ext.mako import render_template

app = Flask(__name__)
app.config['ASSETS_DEBUG'] = True

mako = MakoTemplates(app)
env = assets.Environment(app)

# Tell flask-assets where to look for our coffeescript and sass files.
env.load_path = [
    os.path.join(os.path.dirname(__file__), 'js'),
    os.path.join(os.path.dirname(__file__), 'styles'),
]

coffee = assets.Bundle('**/*.coffee', filters='coffeescript', output="app.js")
env.register('coffee', coffee)

@app.route("/")
def index():
    return render_template('index.html', name='mako')


if __name__ == "__main__":
    app.run(debug=True)

【问题讨论】:

    标签: python flask mako webassets


    【解决方案1】:

    烧瓶资产只是registers the webassets Jinja extension with Flask's Jinja environment。 WebAssets 仅提供(在撰写本文时)with an extension for Jinja2,因此如果您想要 Mako 的资产标签,您将拥有 to write one yourself(尽管有人拥有 already written something similar for Pyramid,所以您可以使用 take inspiration from that)。

    【讨论】:

      【解决方案2】:

      好吧,我想出了一个解决方案。您可以通过将环境导入基本模板并对其进行操作来使其工作。

      assets.py:

      import os
      from flask.ext import assets
      from app import app
      
      env = assets.Environment(app)
      
      # Tell flask-assets where to look for our coffeescript and sass files.
      env.load_path = [
          os.path.join(os.path.dirname(__file__), 'js'),
          os.path.join(os.path.dirname(__file__), 'styles'),
      ]
      
      coffee = assets.Bundle('**/*.coffee', filters='coffeescript', output="app.js")
      env.register('coffee', coffee)
      

      模板:

      <%!
        from assets import env
      %>
      
      <!doctype html>
      
      <html>
          <head>
              <title>Hello Flask</title>
          <head>
          <body>
              <h1>Hello Flask</h1>
      
              % for url in env['coffee'].urls():
                  <script src="${url}"></script>
              % endfor
      
          </body>
      </html>
      

      可能有办法通过使用 MAKO_IMPORTS 配置参数来避免导入,但我没有使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多