开发者社区> 问答> 正文

jinja2模板、框架和html是什么关系?

杨冬芳 2016-06-20 16:28:37 1297

well,正在自学前端,发现不学后端根本搞不懂,故去了学python,然后遇到一个问题
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320129740415df73bf8f81e478982bf4d5c8aa3817a000

里面说到flask渲染jinja2模板,而所谓的jinja2模板就是html的基础上,在需要交互数据的地方加上了一些标注,然后就能实现前后端MVC,然后有种感觉好像就是:

1)一个模板就是凸显在html数据交换部分用特殊的格式写个标记?总感觉只是为了实现数据交互貌似这个模板是不是太大题小用了。

2)这个“模板”貌似跟网上的“html模板”是两个回事,虽然它们都是html写成(后者外观不一样,前者就是……?),这个模板和html有何关系?教程里说到是python的模板,跟python有何关系?

3)web后端开发需要用到模板(为了分离html和后端),框架(为了处理底层HTTP等)。能否脱离模板?不脱离的话,这种依赖是不是很像依赖jquery却不懂原生javascript那样糟糕?

谢谢!

前端开发 JavaScript Python
分享到
取消 提交回答
全部回答(1)
  • 杨冬芳
    2019-07-17 19:44:20

    两天多了没人回答,很冷清啊。
    所有的页面显示都是HTML,无论是原生HTML或者说是此基础上的模板或者其它,最终的形式都是HTML。

    然后这些所谓的模板,就是在原本单一的HTML 基础之上做了许多便于开发的事情。
    比如逻辑判断,比如运算,比如过滤器。当然了,还有比较重要的数据绑定。

    数据绑定的功能得到的结果就是写页面,相似的页面仅需提供一个“模板”,相应的地方丢进去需要的数据即可,此处的“模板”是一个可以理解为数据容器,相当于商场柜台,商场本身已经提供了展示柜,即为此处“模板”,而里面需要展示的东西即为值。
    这也就使得一个网站 “动态” 化了。

    然后回到你问的模板,你所提到的‘网上的“html模板”’,并不知道你指代的是什么。
    Jinja2 是模板,Flask这个框架把它整合在内,对于一种很简单的使用情况,函数返回到相应模板并给定需要传递的值,页面即可获取并解析、显示。

    如下代码:

    @app.route('/')
    def index():
        return render_template("index.html", data="world")

    以及

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
      Hello {{ data }} !
    </body>
    </html>

    假设是这种使用情形下需要前后端分离,需要做好的就是前后端约定好需要传递、接受的数据即可。

    还有一种模板,纯JS的,如AngularJS 的 ng-template。
    它所做的事情,也是将获取到的值传递给页面并显示出来。只是多了很多额外的功能。
    比如自定义指令:

    var app = angular.module('MyApp', [], function(){});
    app.directive('helloWorld',
    function() {
        return {
            restrict: 'E',
            template: '<div>Hello World!</div>'
        };
    })

    以及

    <hello-world></hello-world>

    这里的hello-world标签显然是HTML自身所不具备的,但是通过以上自定义指令,通过Angular解析即可使用。
    而这种使用情境下的前后端分离,体现在了服务端仅仅提供数据,服务端不关心数据如何进一步处理,如何解析到页面。
    这样的话,前端更近一步的分离出来了,到了可以不关心后台使用何种语言,无论Python、Java或者其它,只要能提供数据即可。

    对于Flask里用到的Jinja2,AngularJS 里的ng-template,均可以理解为框架已整合好,开箱即用的。
    基于这种情况必然会有人对此不满不喜欢而希望有其它的东西,因而必然有其它模板。
    比如Jade,一种以Python风格写HTML的模板,比如Transparency。

    那么,问题来了,假如没有这些模板,你该怎样去写页面呢?

    另外,以上的回答,可能全都是错的,所以需要你自己去考证, XD。

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程