返回文章列表文章索引阅读全文
STARBLOG / 阅读手记
0_Django开发常见问题

Django与Vue.js模板语法冲突问题的解决

问题 django模板与vue.js的变量都是使用 {{ 和 }} 包裹起来的,在渲染django模板时会先替代掉所有的 {{ 和 }}及被包裹在其中的内容,使得vue.js没办法用 {{ 和 }}来绑定变量。 解决方法 方法1:修改vue.js的默认的绑定符号 在Vue App创建时配置 let app = new Vue({ delimiters: [[[, ]]], el: '#vu

曦远 (DealiAxy)约 4 分钟
目录6 个章节

问题

django模板与vue.js的变量都是使用 {{ 和 }} 包裹起来的,在渲染django模板时会先替代掉所有的 {{ 和 }}及被包裹在其中的内容,使得vue.js没办法用 {{ 和 }}来绑定变量。

解决方法

方法1:修改vue.js的默认的绑定符号

在Vue App创建时配置

let app = new Vue({
  delimiters: ["[[", "]]"],
  el: '#vue-app',
  // ...
})

或者全局修改

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

执行这个之后,你就可以使用 [[、]] 来绑定变量的数据了

方法2:使用模板的标签来输出 {{ 和 }}

django模板的templatetag可以渲染模板时输出模板标签,标签参数及输出如下:

参数输出
openblock{%
closeblock%}
openvariable{{
closevariable}}
openbrace{
closebrace}
opencomment{#
closecomment#}

我们可以在模板中用

{% templatetag openvariable %} 
{% templatetag closevariable %}

来替代 {{ 和 }}

方法3:禁用django模板渲染

django标签 verbatim可以使包裹其中的代码不进行渲染保持原样输出

{% verbatim %}
    {{ vue }}
{% endverbatim %}

我们可以在需要用于vue.js的地方使用 {% verbatim %}{% endverbatim %} 包裹。

finally

这个项目是我2020年做的一个简单的在线考试系统

最终我是用的第一种方法实现

代码片段如下

<div class="card-header d-flex justify-content-between">
  <div>
    第<b>[[currentShowIndex]]</b>题
    <span class="text-primary font-weight-bold" v-if="current.type==1">单选</span>
    <span class="text-primary font-weight-bold" v-if="current.type==2">多选</span>
    <span class="text-primary font-weight-bold" v-if="current.type==3">判断</span>
  </div>
  <div id="timer"></div>
</div>

_EOF_

Django与Vue.js模板语法冲突问题的解决

本文作者:
程序设计实验室
版权声明:
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

相关文章

StarBlog博客开发笔记(25):图片接口与文件上传

前言 上传文件的接口设计有两种风格,一种是整个项目只设置一个接口用来上传,然后其他需要用到文件的地方,都只存一个引用ID;另一种是每个需要文件的地方单独管理各自的文件。这俩各有优劣吧,本项目中选择的是后者的风格,文章图片和照片模块又要能CRUD又要批量导入,还是各自管理文件比较好。 图片接口 说会正题,先介绍一下图片相关接口。 图片列表 首先CRUD是肯定有的,图片列表的分页查看也是有的,不过因为

2023-02-05 · StarBlog博客开发笔记 · 约 1 分钟

讨论

共 0 条

良言一句三冬暖,恶语伤人六月寒。

加载评论中…