从静态文件夹导入jinja的javascript文件

时间:2015-03-29 22:22:28

标签: python flask jinja2 template-engine

我需要访问javascript文件中的jinja模板(由于i18n标签)。所以我发现的方式只是从jinja方法加载带有include的js文件。 {% include "file.js" %}

但是,此方法仅在模板文件夹中查找文件。但是js文件必须位于静态文件夹中。我的问题是,我怎样才能改变jinja查找文件的方式?在这种情况下,不是在模板文件夹中搜索,而是在静态文件夹中搜索。

{% block javascript %}
    <script type="text/javascript">
        {% include "myscript.js" %}
    </script>
{% endblock %}

3 个答案:

答案 0 :(得分:6)

如果您需要将文件视为模板,那么它不是静态的。将它放在模板文件夹中并渲染它。如果文件是动态的,那么它是静态的。将它放在静态文件夹中并链接到它。不要求给定类型的文件必须是模板或静态文件。挑选任何一个必要的。

另一方面,保持JS静态并向其传递参数可能更好,而不是根据不同的输入生成不同的代码。

答案 1 :(得分:6)

给出一个看起来像这样的示例目录结构

app/static/css/bootstrap.min.css
app/static/js/bootstrap.min.js
app/templates/test_page.html
app/views
run_server

您可以在创建应用对象时设置烧瓶static_url_path

app = Flask(__name__, static_url_path='/static')

然后在test_page.html中你可以看到像这样的东西

<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">

 I am an HTML body

<script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>

虽然不需要设置静态网址路径,但由于上面显示的是默认路径,我想展示它,因为它是我不了解的功能很长一段时间都很有用。

答案 2 :(得分:4)

您可以创建并注册一个全局函数:

distributions {
    main {
        //in here you can use from() to bring what you wish, files,
        // artifacts from configurations, built projects etc
        contents {
            from(createDocs) {
                into "docs"
            }
            from ({project(':subproject.aar').aar}) {
                into "whatever"
            }
            from ("$buildDir/libs") //its always better to use a variable for the build directory imho
        }
    }
}

然后你可以像这样包含它(import os app = Flask(__name__.split('.')[0]) @app.template_global() def static_include(filename): fullpath = os.path.join(app.static_folder, filename) with open(fullpath, 'r') as f: return f.read() - 过滤器阻止引号开始转义):

safe