Django学习案例一(blog):三.模板Templates,djangotemplates

MVC模式的view层的主要任务是进行页面的和结果的显示工作,在php的实现过程中,主要是体现为一个模板的解析过程:首先,controler层从model层得到数据其次,controler层将数据交给view层再次,view层的接口将数据按一定的方式传给模板解析类,最后,模板解析类将数据解析到模板中,然后显示。

MVC模式的view层的主要任务是进行页面的和结果的显示工作,在php的实现过程中,主要是体现为一个模板(使用模板,可以达到php代码和html代码分离的目的,这样代码和页面的维护就方便多了,便于管理和页面的更换,可以真正的划分程序员、美工的分工)的解析过程:
首先,controler层从model层得到数据
其次,controler层将数据交给view层
再次,view层的接口将数据按一定的方式传给模板解析类,
最后,模板解析类将数据解析到模板中,然后显示。

Django学习案例一(blog):三.模板Templates,djangotemplates

下面是一个具体的实现例子目录结构 |- ClassRenderTest.php
//测试解析classlist.html|- StudentRenderTest.php
//测试解析studentlist.html|- render / TemplateParser.php //模板解析类|-
render / Render.php //解析模板的所有类的基础类|- render /
StudentRender.php //解析模板studentlist.html的类|- render /
ClassRender.php //解析模板classlist.html的类|- template /
studentlist.html //模板文件|- template / classlist.html //模板文件

下面是一个具体的实现例子
目录结构

 

注意:1、这里模板解析类选用了简单的TemplateParser.php,根据个人的需要你可以选用任何一种模板解析类;2、如果每个模板解析都直接调用TemplateParser.php,可能会有大量的重复代码出现,这是oo思想所不准许出现的。因此采用Render.php对它进行包装,然后再对Render.php里面的Render类进行扩展,来对不同文件模板进行解析;3、不同的模板解析类的,使用的方法是不同的,他们的包装方式也可能不同。4、StudentRender.phpClassRender.php就是包装过的Render类,分别用来满足解析studentlist.htmlclasslist.html的需要。

|- ClassRenderTest.php          //测试解析classlist.html
|- StudentRenderTest.php        //测试解析studentlist.html
|- render / TemplateParser.php  //模板解析类
|- render / Render.php          //解析模板的所有类的基础类
|- render / StudentRender.php   //解析模板studentlist.html的类
|- render / ClassRender.php     //解析模板classlist.html的类
|- template / studentlist.html  //模板文件
|- template / classlist.html    //模板文件

1.优化url配置

(1)上一节url配置用的是其中一种方式“Function views”,本节进行优化,用“Including another URLconf”方式。

Myblog/urls.py内容

from django.conf.urls import url,include  #此处添加include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^blog/', include('blog.urls')),
]

(2)blog中增加urls.py文件,内容如下:

from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^$',views.index),
]

文件1:classlist.html

注意:
1、这里模板解析类选用了简单的“TemplateParser.php”,根据个人的需要你可以选用任何一种模板解析类;
2、如果每个模板解析都直接调用“TemplateParser.php”,可能会有大量的重复代码出现,这是oo思想所不准许出现的。因此采用“Render.php”对它进行包装,然后再对“Render.php”里面的Render类进行扩展,来对不同文件模板进行解析;
3、不同的模板解析类的,使用的方法是不同的,他们的包装方式也可能不同。
4、“StudentRender.php”“ClassRender.php”就是包装过的Render类,分别用来满足解析“studentlist.html”“classlist.html”的需要。

2.制作模板

(1)APP(blog)中添加templates文件夹

(2)blog/templates中新增新增blog文件夹(与app名相同的文件夹)

(3)blog/templates/blog中新增html文件,取名index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>你好,世界!</h1>>
</body>
</html>

(3)blog/views.y中修改,使用渲染render

from django.shortcuts import render
#from django.http import HttpResponse

def index(request):
    #return HttpResponse('Hello,world!')
    return render(request,'blog/index.html')  #三个参数,1.请求对象本身,2.模板文件 3,后台传到前端的数据

显示如下:

图片 1

 

 

current time is : _now_ BRBRcurrent school class list :TABLE border=1
TR THID/TH THNAME/TH THGRADE/TH THCLASS/TH /TRBEGIN_classlist_TR
TD_cid_/TD TD_cname_/TD TD_grade_/TD&nb<

文件1:classlist.html

3.DTL使用

Render()函数中支持一个dict类型参数,即以上render中提到的第3个参数;该字典是后台传递到模板的参数,键为参数名;在模板中使用
{{参数名}} 来直接使用。

修改blog.views.py和blog.templates.index.html的内容:

blog.views.py修改如下:

from django.shortcuts import render
def index(request):
    #return HttpResponse('Hello,world!')
    return render(request,'index.html',{'hello':'你好,世界!'}) 

blog.templates.index.html修改如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{ hello }}</h1>
</body>
</html>

 

 

 

 

 

 

 

 

 

1.优化url配置 (1)上一节url配置用的是其中一种方式“Function
views”,本节进行优化…

current time is : _now_  <BR><BR>
current school class list :
<TABLE border=1>
    <TR>
     <TH>ID</TH>
        <TH>NAME</TH>
        <TH>GRADE</TH>
        <TH>CLASS</TH>
    </TR>
 BEGIN_classlist_
 <TR>
     <TD>_cid_</TD>
        <TD>_cname_</TD>
        <TD>_grade_</TD>
  &nb
You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图