JavaScript中的模板(jsRender)在Django中的使用

        有时,我们可能会想把存在js数组或字典里的数据放到html里面去,这时比较直接做法就是用js/jquery动态生成html代码,但数据量比较大或数据结构比较复杂时,我想javascript模板可能值得一试。

         jsRender就是javascript一个好用的模板。先给一个简单的例子,看其基本用法。

<html>
<head lang="en">
    <script src="jquery-1.10.2.js"></script>
    <script src="jsviews.js"></script>
    <script type="text/javascript">
        $(function(){
            var person = {
                name: "Adriana"
            };
            var myTemplate = $.templates("#theTmpl");
            var html = myTemplate.render(person);
            debugger;
            $("#cnt").html(html);
        });
    </script>
</head>
<body>
<div id="cnt"></div>
<script type="text/x-jsrender" id="theTmpl">
	<label>Name:</label> {{:name}}
</script>
</body>
</html>
是的,就是这么简单,先定义一个html模板(type="x-jsrender"),然后通过$.templates编译生成一个模板对象,最后通过render将js中的数据渲染到页面上。

jsRender比较好用的一点是,如果js中的数据是数组,js模板会迭代生成的,不用for:

<html>
<head lang="en">
    <script src="jquery-1.10.2.js"></script>
    <script src="jsviews.js"></script>
    <script type="text/javascript">
        $(function(){
            var person = [
                {
                    name: "zhangsan"
                },
                {
                    name: "lisi"
                },
                {
                    name: "wanger"
                }
            ];
            var myTemplate = $.templates("#theTmpl");
            var html = myTemplate.render(person);
            debugger;
            $("#cnt").html(html);
        });
    </script>
</head>
<body>
<div id="cnt"></div>
<script type="text/x-jsrender" id="theTmpl">
	<div>Name:{{:name}}</div>
</script>
</body>
</html>
页面:

Name:zhangsan
Name:lisi
Name:wanger
但,jsRender也有它不好用的一面,简单的数组数据是不能直接render的,必须是对象(字典/关联)数组才行,也就是说如果你的数组只包含简单的一个个的数据,那你在用jsRender前需要首先为每个数据起一个名字。

如果你的对象数组是作为另一个对象的属性出现的时候,这时候再想去遍历就用得着for了

<html>
<head lang="en">
    <script src="jquery-1.10.2.js"></script>
    <script src="jsviews.js"></script>
    <script type="text/javascript">
        $(function(){
            var ClassTwo = {
                students:[
                    {
                        name: "zhangsan"
                    },
                    {
                        name: "lisi"
                    },
                    {
                        name: "wanger"
                    }
                ],
               teachers:{
                   math:"Mr.li",
                   chinese:"Mr.Y"
               }
            };
            var myTemplate = $.templates("#theTmpl");
            var html = myTemplate.render(ClassTwo);
            debugger;
            $("#cnt").html(html);
        });
    </script>
</head>
<body>
<div id="cnt"></div>
<script type="text/x-jsrender" id="theTmpl">
    {{for students}}
	    <div>Name:{{:name}}</div>
	{{/for}}
</script>
</body>
</html>
输出同上。

除了for之外,jsRender还有很多其他tags,请参考:Built-in template tags

但,直接在django的模板中使用jsRender是不行的。需要在js模板前后加标签:{% verbatim %}....{% endverbatim %},处于这个标签内的所有{{}}都会被django忽略。






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值