前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django学习-day03

django学习-day03

作者头像
kirin
发布2020-05-09 15:38:44
6070
发布2020-05-09 15:38:44
举报
文章被收录于专栏:Kirin博客

#DTL模板中的python语句使用 ###if->elif->else: <body> {% if k.o.1 < 2 %} \<p>是的\</p> {% elif k.o.1 == 2 %} <p>刚刚好</p> {% else %} <p>不是</p> {% endif %} </body> 需要注意的是,因为是在DTL模板中使用,需要严格按照django 的语法来执行,包括每一个空格,python对这些是严格的,django 也是一样,DTL模板中所有的标签都是成双成对的

###for <body> {% for x in k reversed %} 加了reversed后变为反向遍历->从未到头 默认是正向遍历的,也就是从头到尾 <li>{{x}}</li> {% endfor %} </body>

###for 字典遍历 {% for keys,values in k.items %} 获取到模板上文中的k值,然后items循环 <li>key:{{keys}}</li> 获取到keys <li>values:{{values}}</li> 获取到values {% endfor %}

### for 遍历需求:打印四大名著信息 <table> <thead> <tr> <td>序号</td> <td>书名</td> <td>作者</td> <td>价格</td> </tr> </thead> <tbody> 这里最主要是掌握html的tr,td标签的使用, {% for x in books %} {% if forloop.first %} 这里的forloop.first表示是否第一次遍历 <tr style=”background:red;”> {% elif forloop.last %} 这里的forloop.last表示是否最后一次遍历 <tr style=”background:yellow”> {% else %} <tr> {% endif %} <td>{{ forloop.counter}}</td> 这里的forloop.counter表示给td标签前面加上序号 counter0表示从0开始 <td>{{x.name}}</td> <td>{{x.person}}</td> <td>{{x.price}}</td> </tr> {% endfor %}

</tbody> </table> ##模板引擎中的上文为: b={‘books’:[

{‘name’:’三国演义’, ‘person’:’罗贯中’, ‘price’:’199′},

{‘name’:’水浒传’, ‘person’:’斯耐庵’, ‘price’:’200′},

{‘name’:’红楼梦’, ‘person’:’曹雪晴’, ‘price’:’2000′},

{‘name’:’西游记’, ‘person’:’吴承恩’, ‘price’:’2000′} ]} return render(request,’index.html’,context=b) 上面这句为渲染模板是传的参数为b,b是一个字典,里面的books, key包含一个列表,列表里面是四个字典,包含四大名著信息 #for遍历的补充 {% for x in books %} {% empyt %} 中间部分表示如果可迭代对象中没有任何值, 也就是为空的之后执行中间这一段empty {% endfor %} 另外coutinue 和break在DTL中也是无法使用的

#with语句块 {% with l=books.1.name %}# 注意,等号前后不能有空格 使用起来很简单 with后面是新变量名,后面接着需要取得值即可 还有一种写法 {% with books.1.name as l %} 两种写法是一样的后面是将什么变成什么 <p>{{l}}</p> <p>{{l}}</p> <p>{{l}}</p> {% endwith%}

#这里需要十分的注意 DTL中的url 这个是urls文件中的url路由 app_name=’app02′ 我加了app_name 应用命名!!!! urlpatterns=[ path(”,views.index,name=’index’), path(‘books/’,views.books,name=’books’), path(‘city/’,views.city,name=’city’), path(‘movies/’,views.movies,name=’movies’), path(‘/books/datell/<datell_id>/<cid>/’,views.books_datell,name=’datell’), 这里需要注意的是/books/datell/<datell_id>/<cid/>这里是一个变量 path(‘login/’,views.login,name=’login’),

] 下面是我DTL中的写法 <ul class=”nav”> <li><a href=”/”>首页</a></li> <li><a href=”{% url ‘app02:books’%}”>读书</a></li> <li><a href=”{% url ‘app02:movies’%}”>电影</a></li> <li><a href=”{% url ‘app02:city’%}”>同城</a></li> <li><a href=”{% url ‘app02:datell’ datell_id=1 cid=2 %}”>最热门的文章</a></li>

需要注意的地方是在上文的路由中有一个datell_id的变量,下文 DTL中需要引用的话不需要加”了,直接在url中写 datell_id=需要的值即可 ,多个参数直接用一个空格隔开即可,不可以用,逗号 <li><a href=”{% url ‘app02:login’ %}?next=/”>登录</a></li> 注意看登录页面中?next=/下一级目录提示,和之前的翻转后拼接是一样的效果 reverse

</ul> 注意:{% url ‘app02:city’%} 开始我是没有加app_name 应用命名上去的,结果一直报错: NoReverseMatch at /app/ Reverse for ‘books’ not found. ‘books’ is not a valid view function or pattern name. 后面我在url中加上了app02:url name 就没有错误了, 浪费了我十多分钟,最后百度才出来的。巨坑

#autoescape django转义语句 url={url:'<a href=”http://www.baidu.com”>百度</a>’} <!–# 这样就可以关闭系统的自动转义–> {% autoescape off %} # on -> 开启 ->关闭 (安全机制) {{ c }} {% endautoescape %} {{ c|safe }} # 这里也是关闭自动转义,关闭安全机制 这样就关闭了django的自动转义,就可以正常的渲染模板了

# verbatim 标签 # 用了verbatim标签之后就不在进行使用变量了,直接输出 {% verbatim %} {{ end }} #这里是一个下行文变量(从上行文中获取的) {% endverbatim%} 最后的输出效果为:{{ end }} #DTL过滤器所有过滤器都不需要加 %% 1.add过滤器,{{ ‘1’|add:’2′}} 把字符1和2int后相加,网页输出3 它可以拼接字符,列表,

2.cut过滤器,{{‘hellow world’|cut:’ ‘}} 把字符串进行拼接,相当于replace

3.date过滤器,{{ today|date:”Y-m-d H:i:s” }} 使用这个过滤器的话需要使用datetime内置库 t={‘today’:datetime.now()} Y->年份 m->月份 d->日 H->小时 i->分钟 s->秒

4.first过滤器 t={‘value’:[1,2,3,4]} #{{ value|first }} 显示迭代对象的第一个值

5.last过滤器 t={‘value’:[1,2,3,4]} #{{ value|last }} 显示迭代对象的最后一个值

6.default过滤器 t={‘value’:’hello’ # default 过滤器,当值为空时显示默认值} #{{ value|default:’我是默认值,为空的时候显示’}}

7.default_if_none过滤器 t = {‘value’: None } {{ value|default_if_none:’只有值为None的时候我才会显示’}}

8.floatformat过滤器 t={‘value’:’5.22222′} {{ value|floatformat}} 四舍五入格式化浮点数,如果浮点数后面全为0则显示整数

9.length过滤器 {{ value|length}} 和len差不多计算可迭代对象长度的

10.lower过滤器 {{ value|lower }} 和lower一样,全部字母转化成小写

11.upper过滤器 { value|upper }} 和upper一样,全部字母转化成大写

12.join过滤器 t={‘value’:[1,2,3,4]} 和join用法一致,拼接字符串 {{ value|join:’,’}} # 1234

13.random过滤器 用法和random随机函数一样 t={‘value’:[1,2,3,4]} {{ value|random}}

14.safe过滤器 用法和autoescpace的off类似 {{ value|safe }} 表示该参数是安全的

15.slice过滤器 用法和切片一样的 {{ value|slice:”5:”}} 取第6个参数到最后python中0开始数的,0-5所以是6

16.striptags过滤器 清除掉html标签 t={‘value’:'<html>清除标签</html>’} {{ value|striptags }} # 输出结果为 清除标签(就不会带标签对转义了) 17.truncatechars过滤器 t={‘value’:’北京欢迎你~’} {{ value|truncatechars:5}} 表示取value变量中的4个字符其余以…方式显示 #显示效果:北京欢迎… 18.truncatechars_html过滤器 用法和striptags相反,它是用保留html标签的, t={‘value’:'<p>北京欢迎你~</p>’} {{ value|truncatechars:5}} #输出效果 <p>北… 他就不会把html标签转义了,而是直接当做字符输出

##基本常用的过滤器就到了这里了,需要看到过滤器的函数写法可以到 from django.template import defaultfilters 导入模块之后可以ctrl+b打开源代码查看过滤器写法和用法

#自定义过滤器 # 过滤器最多只能有两个参数,第一个参数是被过滤的 在当前app下新建一个templatetags python包,然后里面新建你需要创建的Python文件,代码格式如下,注意,对象名register 不能更改,更改必然报错

from django import template register=template.Library() def greet(value,word): return value+word

register.filter(‘greet’,greet)

DTL文件中 {% load my_first %} views视图文件中写法是一样的,上面表示把输入的值和定义的值进行拼接操作

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档