2014-12-11 5 views
2

Я хотел бы использовать колбу-активы для организации моих веб-сайтов и мако для шаблонов. Колба-активы обычно использует дзиндзя следующим образом:Использование Flask-Assets с Flask-Mako

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

Мако эквивалентном (насколько я знаю) будет следующим:

% 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 

Есть ли способ использовать пользовательские контрольные ключевые слова (например, «активы») в Мако?

Вот мой 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) 

ответ

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, но я не играл с ним.

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).