day65

参考:https://www.cnblogs.com/liwenzhou/p/8296964.html

Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。

Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。

Django的MTV模式

Model(模型):负责业务对象与数据库的对象(ORM)

Template(模版):负责如何把页面展示给用户

View(视图):负责业务逻辑,并在适当的时候调用Model和Template

此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

Django框架图示

模板

详细参考:http://www.cnblogs.com/liwenzhou/p/7931828.html

常用语法

官方文档:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for

只需要记两种特殊符号:

{{  }}和 {% %}

变量相关的用{{}},逻辑相关的用{%%}。

a.目前学过的模板语言

b.其他

 class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age def dream(self):
return "执行方法(只能调用不带参数的方法)"
def __str__(self):
return "<Person Object: {}>".format(self.name)
# 模板语言测试
def template_test(request):
file_size = 12345678
from datetime import datetime
now = datetime.now()
name = "小黑"
age = 18
a_html = "<a href='http://www.douban.com'>我是后端的a标签</a>"
script_html = "<script>for(var i=0;i<100;i++){alert(123);}</script>"
name_list = ["嘟嘟", "劳斯莱斯", "牛奶"]
name_list2 = [["啦啦0", "李伟师0", "薯片0"], ["嘟嘟1", "劳斯莱斯1", "牛奶1"]]
name_dict = {"first_name": "fuck", "last_name": "shit"}
p1 = Person("alex", 56)
p2 = Person("lulu", 18)
p_list = [p1, p2]
p_str = '''世界的眼睛、红楼梦、繁华、追风筝的人、巴别塔之犬'''
return render(
request,
"t_test.html",
{
"name": name,
"age1": age,
"name_list": name_list,
"name_list2": name_list2,
"name_dict": name_dict,
"p1": p1,
"p2": p2,
"p_list": p_list,
"file_size": file_size,
"now": now,
"a_html": a_html,
"script_html": script_html,
"p_str": p_str
}
)

模板中支持的写法:

Filters(过滤器)

自定义filter

自定义过滤器只是带有一个或两个参数的Python函数:

  • 变量(输入)的值 - -不一定是一个字符串
  • 参数的值 - 这可以有一个默认值,或完全省略

例如,在过滤器{{var | foo:'bar'}}中,过滤器foo将传递变量var和参数“bar”

在app01下新建一个名为templatetags的package

myfilter.py

 from django import template
register = template.Library() # 告诉Django的模板语言我现在有一个自定义的filter方法,名字叫sb
@register.filter(name="sb")
def add_sb(arg):
return "{} sb啊.".format(arg) # 告诉Django的模板语言我现在有一个自定义的filter方法,名字叫addstr
@register.filter(name="addstr") #告诉html用addstr这个名字可以调用这个方法
def add_str(arg, arg2):
"""
第一个参数永远是管道符前面那个变量
:param arg: 道符前面那个变量
:param arg2: 冒号后面的变量
:return:
"""
return "{} {}.".format(arg, arg2)

实践:

Tags

<p>for循环</p>
<ul>
{% for name in name_list %}
{% if forloop.last %}
{# forloop.revcounter 当前循环的倒序索引值(从1开始)#}
<li class="dsb">{{ forloop.revcounter }}-{{ name }}</li>
{% else %}
<li class="{% if forloop.first %}'sb'{% endif %}">{{ forloop.revcounter }}-{{ name }}</li>
{% endif %}
{% endfor %}
</ul> <hr>
<p>双层循环</p>
{% for name in name_list2 %}
{% for name1 in name %}
{# {{ forloop.parentloop.counter }}#}
{# {{ forloop.counter }}#}
{{ name1 }}
{% endfor %}
{% endfor %} <hr> <p>if/ elif/ else</p>
{% if p3 %}
<p>p3:{{ p3 }}</p>
{% elif p2 %}
<p>p2:{{ p2 }}</p>
{% else %}
<p>什么人都没有!</p>
{% endif %} <hr> {#计算列表长度#}
{% if name_list|length >= 3 %}
<p>需要打两辆车</p>
{% else %}
<p>一辆足矣!</p>
{% endif %} <hr> <p>with语句</p>
{{ name_list2.1.1 }} {% with name=name_list2.1.1 %}
{# 定义一个中间变量,多用于给一个复杂的变量起别名。#}
{{ name }}
{% endwith %}
<hr>

结果:

数据库中找不到数据时显示:

Django(框架、模板)的更多相关文章

  1. 3/21 Django框架 模板路径及模板过滤器 1.模板路径查找

    3/21 Django框架 模板路径及模板过滤器 1.模板路径查找 先找settings.py里的TEMPLATES列表下的DIRS路径.如果APP_DIRS为True,还会到注册了的APP文件夹下依 ...

  2. Django框架-模板层

    Django框架-模板层 一.模板语法传值 1.验证是否python所有的数据类型都可以传递到前端 locals()的妙用:该方法虽然好用,但是在某些情况下会造成资源的浪费 结论:整型.浮点型.字符串 ...

  3. Django框架----模板语法

    Django模板系统 官方文档 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 只需要记两种特殊符号: {{  }}和 {% %} 变量 ...

  4. Django框架-模板系统

    来看一段代码 def current_datetime(request): now = datetime.datetime.now() html = "<html><bod ...

  5. python 之 Django框架(模板系统、过滤器、simple_tag、inclusion_tag、Tags、母版、组件)

    12.35 Django模板系统 {{ }}和 {% %},变量相关的用{{}},逻辑相关的用{%%} app02/views: # 模板语言测试函数 def template_test(reques ...

  6. 053.Python前端Django框架模板层

    模板层 一 模板语法之变量 在 Django 模板中遍历复杂数据结构的关键是句点字符, 语法: {{ var_name }} [root@node10 mysite]# cat app01/urls. ...

  7. Django框架----模板继承和静态文件配置

    母板 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  8. Django框架之【自定义模板过滤器与标签】

    本文在我的微信公众号的链接:https://mp.weixin.qq.com/s?__biz=MzU5NTU5MjcwNw==&mid=2247483674&idx=1&sn= ...

  9. Django web框架-----Django templates模板

    说明:mytestsite是django框架下的项目,quicktool是mytestsite项目中的应用 一般的变量之类的用 {{ }}(变量),功能类的比如循环.条件判断是用 {% %}(标签) ...

  10. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

随机推荐

  1. mybatis 的查询某个字段的特定位数(模糊查询)

    获取特定的几位:1.取url字段后三位字符 select SUBSTRING(url, -3) from link; 2.取url字段前三位字符 select SUBSTRING(url, 3) fr ...

  2. SLI的相关学习

    今天帮人安装前年的机皇-微星GT80S的操作系统,安装好后用鲁大师测试下跑分,发现双显卡和单显卡鲁大师的跑分竟然一样,就像副显卡根本没有工作,听主人所这台机器能跑到36万以上. 然后就苦逼的尝试,把B ...

  3. 比较完整的HIS系统解释(转载记录)

    HIS系统即医院信息系统(全称为Hospital Information System).在国际学术界,它已被公认为是新兴的医学信息学的重要分支.HIS系统的有效运行,将提高医院各项工作的效率和质量, ...

  4. linux_制作本地yum源

    新建文件夹 mkdir /root/guazai 并将本地磁盘挂载到当前文件夹 mount -o loop /dev/cdrom /root/guazai/ 新建文件夹 mkdir /mnt/loca ...

  5. kbmmw 5.02发布

    5.02.00 May 27 2017 Important notes (changes that may break existing code) ========================= ...

  6. How to turn on syntax highlighting in osx

    put follow code in ~/.vimrc set ai " auto indenting set history=100 " keep 100 lines of hi ...

  7. 手机上输入http://192.168.1.102:8888/FiddlerRoot.cer为什么下载不了证书

    因为之前你的手机可能已经安装了该证书,所以再次下载会说找不到证书 解决办法:如果你遇到上面的问题,就可能是证书的问题(我的本地证书是用系统生成证书的一个软件生成的个人证书,所以出现了问题),操作步骤如 ...

  8. Java泛型总结——吃透泛型开发

    什么是泛型 泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现. 泛型机制将类型转换时的类型检查从运行时提前到了编译时,使用泛型编写的代码比杂乱的使用objec ...

  9. ZOJ 2132 The Most Frequent Number (贪心)

    题意:给定一个序列,里面有一个数字出现了超过 n / 2,问你是哪个数字,但是内存只有 1 M. 析:首先不能开数组,其实也是可以的了,后台数据没有那么大,每次申请内存就可以过了.正解应该是贪心,模拟 ...

  10. revoke回收权限的小问题

    revoke回收权限的时候,原理是从user/db/tables_priv/columns_priv四个表上delete数据: on *.*的权限在user表上 on xx.*的权限在db表上 on ...