在着手开发一个SPA项目时,由于才疏学浅,被一个问题蹂躏了将近三天:如何把Django后台Views的值传递给前端的jQuery(JS),再由前端处理后显示与HTML中或者仅仅作为参数去使用,同时这个过程要是Ajax方式的,也就是不刷新页面。
官方文档,网上的教程(如“自强学堂”),技术博客,搜一下,满都是。这个问题似乎很好解决。但是,如果知识功底不扎实,也没有人指导,还是会折腾好久的。我要把解决过程和我掌握基本知识写下来,以免以后的朋友再踩这个坑。
基本环境:
python:3.6.3
Django:1.11.6
这个问题的解决有以下两种入手方式:
1.采用Django自带的Template模板系统
在学习Django的时候,大家都至少接触过这个系统,它是Django内置的。就如同静态文件加载(static)一样,采用了这个系统的模板,就必须在Django的server下打开网页,否则毫无疑问会报错。
在这里只做基本回顾:
结构:
{ { }} 双大括号包括起来的是变量
{% %} 模式是块,可以用if和for之类的语句进行遍历
| 括号中的值末尾加“|”,可以使用筛选器,筛选结果
用法:
①在.py文件中 from django.template import Template
便可以在文件的任意字符串中使用模板
②直接在html文件的几乎任意位置使用,在页面被context(一会说)渲染的时候,便会被所渲染的值替代。
思路:把你想要的值(无论是数组、整形、字符串、字典还是别的什么混合结构),用 { { 名称}} 的格式返回给JS代码中的某个变量,然后就可以自由自在的运用它了。
示例:
1.使用ajax方法向url "mysite/foobar/"发送请求
2.当访问url "mysite/foobar/" 的时候,调用Views里的函数 foobar,采用某个函数,返回我们要的字典 data={'foo':'bar'} 到前端
3.在前端的html页面中的<script>标签中,使用var name = { { data|safe }}完成接收
urls.py