• 首页

  • 官方

  • 主题

  • 关注

  • 联系

解决Python web框架(如Flask)与vue渲染变量的冲突(冲突会导致vue渲染报错,网页无法显示)

解决Python web框架(如Flask)与vue渲染变量的冲突(冲突会导致vue渲染报错,网页无法显示)

导语:现在主流的Python web框架中,模板的表达式声明常见的有{{ something }}这与Vue.js的语法冲突,导致在运行如Flask的Python web框架时,会报错,前端网页无法渲染。

解决方法:

1. 重新定义vue的插值的符号——delimiters选项。如下代码(在js中vue渲染时添加):

new Vue({
    delimiters: ["<<", ">>"],
    el:"#app",
    data: {
        msg:"gxg"
    }
})
这样在前端就可以将vue的{{something}}改成<<something>>,避免冲突了。

2. 修改jinja2引擎模版。如下代码(在app.py里修改):

app.jinja_env.variable_start_string = '<<'
app.jinja_env.variable_end_string = '>>'
这样在前端就可以将flask的{{something}}改成<<something>>,避免冲突了。

3. 使用 Jinja2 的 raw 标签标记html代码。如下代码(在x.html里修改):

{% raw %}
<div id="app">
    {{ js_var }}
</div>
{% endraw %}

4. 放弃render_template的模板渲染方式

@app.route("/")
def index():
    return render_template("x.html",encoding='UTF-8')

使用open('./templates/x.html',encoding='UTF-8').read()
可是这种方式可能就得换种方式从后端向前端发送数据了。

posted @ 2021-09-05 19:03  戈小戈  阅读(752)  评论(0编辑  收藏  举报