• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Django之模板层的实现代码

python 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

在例子视图中返回文本的方式有点特别,即HTML被直接硬编码在Python代码之中。

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

尽管这种技术便于解释视图是如何工作的,但直接将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]})

一、模板语法之变量

在Django模板中遍历复杂数据结构的关键是句点字符,语法:

{{var_name}}

views.py:

def index(request):
  import datetime
  s="hello"
  l=[111,222,333]  # 列表
  dic={"name":"yuan","age":18} # 字典
  date = datetime.date(1993, 5, 2)  # 日期对象

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

  person_yuan=<em>本文来源[email protected]搞@^&代*@码2网</em>Person("yuan") # 自定义类对象
  person_egon=Person("egon")
  person_alex=Person("alex")

  person_list=[person_yuan,person_egon,person_alex]

   return render(request,"index.html",{"l":l,"dic":dic,"date":date,"person_list":person_list})

template:

<h4>{{s}}</h4>
<h4>列表:{{ l.0 }}</h4>
<h4>列表:{{ l.2 }}</h4>
<h4>字典:{{ dic.name }}</h4>
<h4>日期:{{ date.year }}</h4>
<h4>类对象列表:{{ person_list.0.name }}</h4>
注:句点符也可以用来引用对象的方法(无参数方法):
<h4>字典:{{ dic.name.upper }}</h4>

二、模板之过滤器

语法:

{{obj|filter_name:param}}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Django之模板层的实现代码

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址