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 是否提供整个最终 html 模板,包括 js 和 css?
或
- flask 是否只服务于 html 页面,而 js 和 css 由 nginx 服务?
或
- 或者甚至可以让 flask 服务于 html 的一部分,让 nginx 服务于完整的 html 页面和资产?
- 如何缓存动态jinja模板中常用的js和css元素?
在另一个问题中:
[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。
我想更好地理解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 是否提供整个最终 html 模板,包括 js 和 css? 或
- flask 是否只服务于 html 页面,而 js 和 css 由 nginx 服务? 或
- 或者甚至可以让 flask 服务于 html 的一部分,让 nginx 服务于完整的 html 页面和资产?
- 如何缓存动态jinja模板中常用的js和css元素?
在另一个问题中: [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。