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

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

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那样糟糕?

谢谢!


两天多了没人回答,很冷清啊。
所有的页面显示都是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。

【热门文章】
【热门文章】