Django 模板中的 Vue.js

Posted

技术标签:

【中文标题】Django 模板中的 Vue.js【英文标题】:Vue.js in Django Templates 【发布时间】:2018-06-15 22:55:26 【问题描述】:

我正在尝试在 Django 模板中使用 Vue.js。一个这样的模板如下:

% load static %
<!DOCTYPE html>
<html>

<head>
</head>

<body>
    <div id="myApp">
        <span>Hello [[ message ]]</span>
        <div id="map"></map>
    </div>
    <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
    <script src="https://v1.vuejs.org/js/vue.js"></script>
    <script src="% static 'js/script.js' %"></script>
    <script async defer src="https://maps.googleapis.com/maps/api/js?key=KEY&callback=initMap"></script>
</body>

</html>

我将 Vue 的插值分隔符更改为 [[ ]] 以避免与 Django 冲突。我的script.js 如下:

$(function() 
    var app = new Vue(
        el: '#myApp',
        delimiters: ['[[', ']]'],
        data: 
            message: 'Hello, world!'
        
    );
);

不幸的是,呈现的 HTML 包含[[ message ]]。有没有其他人遇到过类似的问题?

【问题讨论】:

你用的是什么版本的vue? v1.vuejs.org/js/vue.js v1.0.28 令人惊讶的是,v-text="message" 指令有效 【参考方案1】:

正如 Vue v1.0 的 docs 所说:

// ES6 template string style
Vue.config.delimiters = ['$', '']

因此,在您的示例中更改为:

$(function() 
    Vue.config.delimiters = ['[[', ']]'];
    var app = new Vue(
        el: '#myApp',
        data: 
            message: 'Hello, world!'
        
    );
);

但强烈建议使用新版本的 Vue(版本 2)以保持最新!

【讨论】:

有效。但是,当我在控制台中尝试它时没有用,可能是因为 Vue 需要所有配置,因为它会进行插值。顺便问一下,第一次加载页面时如何加快插值速度? 根据docs 再次 说:Vue.config 是一个包含 Vue 全局配置的对象。您可以引导您的应用程序之前修改其下面列出的属性。至于您的其他问题,最好为此提出一个新问题!【参考方案2】:

Django 具有使用verbatim 跳过解释模板的内置功能

<div id="myApp">
    % verbatim %
        value_from_vue 
    % endverbatim %
     value_from_django 
</div>

<script>
    var myApp = new Vue(
        el: '#myApp',
        data: 
            value_from_vue: "hello from vue"
        
    )
</script>

django 模板引擎不会逐字解释任何内容。当其他(如果有)javascript 库不提供分隔符选项时,此功能也很有用。

但是,如果首选配置分隔符:

对于最新的 Vue(版本 2+),将配置放入 vue 实例中,就像在问题中一样。

$(function() 
    var app = new Vue(
        el: '#myApp',
        delimiters: ['[[', ']]'],
        data: 
            message: 'Hello, world!'
        
    );
);

对于 Vue 的第 1 版,就像 nik_m 的答案一样使用

Vue.config.delimiters = ['[[', ']]'];

【讨论】:

以上是关于Django 模板中的 Vue.js的主要内容,如果未能解决你的问题,请参考以下文章

django模板与vue.js冲突问题

道具被变异(在 django 模板和带有 CDN 的 Vue.js 中)

将 vue js 应用程序绑定到 django 模板不显示任何内容

如何在 django 模板中使用 vue 库

Vue.js:如何在 .vue 模板文件中的 vue 方法中设置数据变量

从 vue.js 中的父模板调用函数