码迷,mamicode.com
首页 > 其他好文 > 详细

Django - 模板层

时间:2018-05-21 16:10:09      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:extend   9.png   简洁   ons   tag   lock   src   fir   name   

 

直接将HTML硬编码到视图里并不是一个好主意。 让我们来看一下为什么:

from django.shortcuts import render,HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = <html><body>It is now %s</body></html> % now

    return HttpResponse(html)
  • 对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。 站点设计的修改往往比底层 Python 代码的修改要频繁得多,因此如果可以在不进行 Python 代码修改的情况下变更设计,那将会方便得多。

  • Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成。 设计者和HTML/CSS的编码人员不应该被要求去编辑Python的代码来完成他们的工作。

  • 程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python又包含 HTML 的文件的编辑工作。

基于这些原因,将页面的设计和Python的代码分离开会更干净简洁更容易维护。 我们可以使用 Django的 模板系统 (Template System)来实现这种模式

python的模板:HTML代码+模板语法

def current_time(req):
    # ================================原始的视图函数
    # import datetime
    # now=datetime.datetime.now()
    # html="<html><body>现在时刻:<h1>%s.</h1></body></html>" %now


    # ================================django模板修改的视图函数
    # from django.template import Template,Context
    # now=datetime.datetime.now()
    # t=Template(‘<html><body>现在时刻是:<h1>{{current_date}}</h1></body></html>‘)
    # #t=get_template(‘current_datetime.html‘)
    # c=Context({‘current_date‘:str(now)})
    # html=t.render(c)
    #
    # return HttpResponse(html)


    #另一种写法(推荐)
    import datetime
    now=datetime.datetime.now()
    return render(req, current_datetime.html, {current_date:str(now)[:19]})

一、模板语法 - 变量

模板语法
1.渲染变量{{ }}
1.深度查询 句点符
      语法:{{var_name}}

      <p>{{ alex.age }}</p>

<p>{{ person_list.1.age }}</p>
2.过滤器
      语法:{{obj|filter__name:param}}

      按照某种形式渲染出来

<p>{{ now|date:‘Y-m-d‘ }}</p>
<p>{{ info.name|upper }}</p>

2.渲染标签{% %}
      语法:{% tag %}
      ...

 

示例:

views.py

from django.shortcuts import render,HttpResponse

def index(request):
    #============================模板语法之变量===================================
    import datetime
    s = hello
    li = [111,222,333]
    dic = {name:alce,age:22}
    date = datetime.date(2018,5,21)

    class Person(object):
        def __init__(self,name):
            self.name = name

    person_yuan = Person(yuan)
    person_alex = Person(alex)
    person_egon = Person(egon)

    person_list = [person_yuan,person_alex,person_egon]

    # return render(request,‘index.html‘,{‘s‘:s})
    # 所有得变量都会传到模板中
    return render(request,index.html,locals())

 

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>

<h3>模板语法之变量</h3>
<p>{{ s }}</p>
<p>{{ li }}</p>
<p>{{ li.1 }}</p>
<p>{{ dic }}</p>
<p>{{ dic.name }}</p>
<p>{{ date }}</p>
<p>{{ date.year }}</p>
<p>{{ person_alex }}</p>
<p>{{ person_alex.name }}</p>
<p>{{ person_list }}</p>
<p>{{ person_list.1.name }}</p>
<p>{{ person_list.1.name.upper }}</p>
# 句点符也可以用来引用对象的方法(无参数方法):

</body>
</html>

 

技术分享图片

 

二、模板 - 过滤器

三、模板 - 标签

四、模板 - 自定义标签和过滤器

五、模板 - 继承(extend)

 

Django - 模板层

标签:extend   9.png   简洁   ons   tag   lock   src   fir   name   

原文地址:https://www.cnblogs.com/alice-bj/p/9067099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!