<template id="task-template">
<h1>My Tasks</h1>
<tasks-app></tasks-app>
<ul class="list-group">
<li class="list-group-item" v-for="task in list">
{{task.body|e}}
</li>
</ul>
</template>
これが私のhtmlです。代わりにVueでコードをレンダリングします。
<script>
Vue.component('tasks-app', {
template: '#tasks-template',
data: function() {
return {
list: []
}
}
created: function() {
$.getJson('/api/tasks', function(data) {
this.list = data;
})
}
})
new Vue({
el: 'body',
});
</script>
上記は私のVueコードであり、Jinjaは 'task'が未定義であるという例外を発生させます。代わりにVue= Jinjaの場合、Laravelでこれを行うことができます。
"@{{task.body}}"
私はJinjaが初めてなので、誰か助けてくれませんか?
もう1つのオプションは、Vue.jsで使用される区切り文字を再定義することです。これは、既存のテンプレートコードが多くあり、Vue.js機能をFlaskまたはDjangoプロジェクトに追加し始める場合に便利です。
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
},
delimiters: ['[[',']]']
})
次に、HTMLで、JinjaとVue.jsのテンプレートタグを混在させることができます。
<div id="app">
{{normaltemplatetag}}
[[ message ]]
</div>
"delimiters" プロパティがいつ追加されたかはわかりませんが、バージョン2.0にあります。
テンプレートの一部をrawとして定義する必要があります。これにより、Jinjaは独自のコンテキストで埋めようとせずにその部分をエスケープします。
必要な方法は次のとおりです。
<template id="task-template">
<h1>My Tasks</h1>
<tasks-app></tasks-app>
<ul class="list-group">
<li class="list-group-item" v-for="task in list">
{% raw %}{{task.body|e}}{% endraw %}
</li>
</ul>
</template>
Flaskを使用している場合、Jinjaで使用される区切り文字を再定義できます。
class CustomFlask(Flask):
jinja_options = Flask.jinja_options.copy()
jinja_options.update(dict(
variable_start_string='%%', # Default is '{{', I'm changing this because Vue.js uses '{{' / '}}'
variable_end_string='%%',
))
app = CustomFlask(__name__) # This replaces your existing "app = Flask(__name__)"
使用する {{ '{{ vue }}' }}
私は同じ問題を抱えていましたが、解決しました。
Vue 'delimiters'オプションを使用してv2クラスインスタンスを構成します。
<div id='myapp'> !{ message } </div>
<script>
let myapp = new Vue({ delimiters: ['!{', '}'], ...});
</script>