【问题标题】:Import javascript files with jinja from static folder [duplicate]从静态文件夹中导入带有 jinja 的 javascript 文件 [重复]
【发布时间】:2015-06-02 20:15:36
【问题描述】:

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

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

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

【问题讨论】:

标签: python flask jinja2 template-engine


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    给定一个如下所示的示例目录结构

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

    你可以在创建app对象的时候设置flaskstatic_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>
    

    虽然不需要设置静态 URL 路径,但由于上面显示的是默认值,因此我想展示它,因为这是我很久不知道的功能并且很有用。

    【讨论】:

      【解决方案3】:

      您可以这样做创建和注册一个全局函数:

      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-filter 防止引号开始转义):

      {% block javascript %}
          <script type="text/javascript">
              {{ static_include("myscript.js") | safe }}
          </script>
      {% endblock %}
      

      【讨论】:

        猜你喜欢
        • 2017-06-15
        • 2021-03-28
        • 2019-09-19
        • 1970-01-01
        • 2020-04-17
        • 2018-11-19
        • 2015-03-12
        • 2021-05-28
        • 2015-11-25
        相关资源
        最近更新 更多