flask 模板:nginx 缓存或提供在 jinja 标记中调用的静态资产

flask templates: nginx cache or serve static assets called in jinja markups

我想更好地理解flask 如何在 ningx 背后提供 jinja 模板的逻辑

我的目标是优化加载时间,通过缓存或使 ningx 服务于 JS,CSS 并且如果可能 html 模板的片段 那不是动态的.

根据评论更新

我如何测试 Ningx 和 Flask 之间的哪个服务服务于由 jinja 标记为 src="{{ url_for('static', filename='static/js/pageScript.js'}} 在 html 模板中调用的静态资产?

我想尽量把静态资源委托给Nginx, 我想了解以下配置的哪个功能。

例如,所有 JS,从 page.html 模板调用的 CSS 对于路由 /path/ 的所有 <int:ids> 都是相同的:

@application.route('/path/<int:id>/')
def graph_template(id):
    meta = {'og:title':'the title of my page is about element ID'}
    return render_template('page.html', meta=meta)

只有动态部分是<meta>片段,但在模板中我将通过以下方式调用JS和CSS:

<script type="text/javascript" src="{{ url_for('static', filename='static/js/pageScript.js') }}"></script>

在另一个问题中: [Flask: Caching static files (.js, .css) 建议使用 nginx 为静态元素提供服务,但这里我有 dynamic 元素通过 jinja 标记 调用,我不清楚哪个服务正在处理什么。


我的 nginx 配置使用这些块来路由 /static/ 和 /path/:

location /static {
alias /var/www/mySite/static;
}

location /path/ {
   include uwsgi_params;
   uwsgi_pass unix:/var/www/mySite/myApp.sock;
}

用于调用资产的 Page.html 模板中的 Jijnja 标记:

<script type="text/javascript"  src="{{ url_for('static', filename='static/js/pageScript.js') }}"></script>

呈现:src=/static/js/pageScript.js

flask 应用程序的结构是:

/app.py
/templates/page.html
/static/js/pageScript.js

查看实际上服务的最简单方法是向可以[=21]的每个元素添加自定义header =] 提供服务,然后跟踪返回了哪些 header(s):

# In your application setup code:
@app.after_request
def add_served_by_flask_header(response):
    response.headers["X-Served-By-Flask"] = "true"
    return response

并且在您的 nginx 配置中:

location /static {
    alias /var/www/mySite/static;
    add_header X-Served-By-NGINX true always;
}

也就是说,看起来您应该会看到您的标记由 Flask 提供,但您的静态文件将由 nginx 提供。 Flask 动态生成标记,但是当浏览器下载 HTML 指向的文件时,nginx 会处理它而无需调用 Flask。