已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Django 模板系统1.中的是变量,%中的是标签,如if,for等;|为过滤器,如filter 过滤器的例子, 它能让你用来转换变量的输出, 在这个例子中, ship_date|date:F j, Y 将变量 ship_date 用 date 过滤器来转换,转换的参数是 F j, Y . date 过滤器根据指定的参数进行格式输出 .2.利用Context来将python代码中的数据传输到模板中,Context中是一个字典,其中键是模板中的变量,而值为代码中的值,如c=next(“John”:”name”,”20”:”age”)再利用rende或render_to_response来将context与模板联系起来。3.利用小数点。如果Context中传递的数据是一个字典,如:Context(“person”:“person”)person=“name”:”John”,”age”:”20”, 则在模板中可利用小数点调用My name is ,and I am person.age years old.另外还可以利用小数点进行一些函数操作,如:upper(),lower(),isdigit(),使用时不加括号,也不能传递参数。还可以datetime模块中利用,如: from django.template import Template, Context import datetime d = datetime.date(1993, 5, 2) d.year1993 d.month5 d.day2 t = Template(The month is date.month and the year is date.year .) c = Context(date: d) t.render(c)The month is 5 and the year is 1993.最后,如果传入列表,还可以用以列表的索引。小数点后为索引值(整形,不支持负数)句点查找规则可概括为:当模板系统在变量名中遇到点时,按照以下顺序尝试进行查找: 字典类型查找 (比如 foobar ) 属性查找 (比如 foo.bar ) 方法调用 (比如 foo.bar() ) 列表类型索引查找 (比如 foobar )系统使用所找到的第一个有效类型。这是一种短路逻辑。补充:小数点查询支持嵌套,如果=John,则.upper=JOHN4.可以将url中的变量与视图函数中的变量联系起来,如设置url为rweb/(d+)/$,web.views.index则在写index函数时可有两个形参如index(req,offset),其中的offset值即d+所对应的值。还可利用?,比如rblog/?id=2,就会将id=2传递给对应的views方法。在views中就可以利用request.GETid来接受这个参数。5.可以对一个Context对象进行字典操作,例如:c=Context(name:John)cnameJohndel cnamecnamecage=20cage206.在 python 中空的列表 ( ) , tuple( () ) ,字典( ) ,字符串 ( ) ,零( 0 ) ,还有 None对象,在逻辑判断中都为假,其他的情况都为真。7.你无法在html标签中使用含括号的语句,比如:%If (a=0 and b=0) or c=0%这样的语句是不合法的,当然去掉括号后:%If a=0 and b=0 or c=0% 依旧不合法,标签中不允许使用两个以上不同种的逻辑词(相同的逻辑词可多次使用),你可以使用嵌套来达到这种目的:%if a=0 and b=0%if c=0%Do sth.%endif%endif%另外,并没有%elif%这样的标签,依旧需要嵌套来完成。比如:%if % if:%else% = elif:%if % elif: %else% %if%endif%endif%endif%8.%for%语句不支持break和continue语句。% for % 标签在循环中设置了一个特殊的 forloop 模板变量。这个变量能提供一些当前循环进展的信息:forloop.counter 总是一个表示当前循环的执行次数的整数计数器。这个计数器是从 1 开始的,所以在第一次循环时 forloop.counter 将会被设置为 1。例子如下:% for item in todo_list % forloop.counter : item % endfor %forloop.counter0 类似于 forloop.counter ,但是它是从 0 计数的。第一次执行循环时这个变量会被设置为 0。forloop.revcounter 是表示循环中剩余项的整型变量。在循环初次执行时forloop.revcounter 将被设置为序列中项的总数。最后一次循环执行中,这个变量将被置 1。forloop.revcounter0 类似于 forloop.revcounter ,但它以 0 做为结束索引。在第一次执行循环时,该变量会被置为序列的项的个数减 1。在最后一次迭代时,该变量为 0。forloop.first 是一个布尔值。在第一次执行循环时该变量为 True,在下面的情形中这个变量是很有用的。% for object in objects % if forloop.first % else % endif % object % endfor %forloop.last 是一个布尔值;在最后一次执行循环时被置为 True。一个常见的用法是在一系列的链接之间放置管道符( | )% for link in links % link % if not forloop.last % | % endif % endfor %The above template code might output something like this:Link1 | Link2 | Link3 | Link4forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)。例子在此:% for country in countries % for city in country.city_list %Country # forloop.parentloop.counter City # forloop. counter city % endfor % endfor %for%标签中含有%empty%,相当于当循环变量为空时执行的命令。9.在Django中,不能使用if a=b或者if a=1,因此,Django 为我们提供了%ifequal%和%ifnotequal%两个标签用以比较聊个模板变量是否相同,示例如下:%ifequal a b%#比较a与b是否相同Welcom!%endifequal%另外,%ifequal%支持%else%。%ifequal%标签仅支持整形,浮点型,字符串的判断。10.模板继承:我们可以利用%include%来继承模板,比如%include index.html%语句就会在此处显示index.html的内容,但要注意模板变量由主模板对应函数传输而不是继承模板所对应的函数。显然这种方法是不方便的,因此还可以利用以下方法:第一步是定义基础模板 , 该框架之后将由子模板所继承。以下是我们目前所讲述范例的基础模板:% block title % endblock %My helpful timestamp site% block content % endblock % block footer %Thanks for visiting my site.% endblock %这个叫做 base.html 的模板定义了一个简单的 HTML 框架文档,我们将在本站点的所有页面中使用。子模板的作用就是重载、添加或保留那些块的内容。我们使用一个以前已经见过的模板标签: % block % 。 所有的 % block % 标签告诉模板引擎,子模板可以重载这些部分。现在我们已经有了一个基本模板,我们可以修改 current_datetime.html 模板来 使用它:% extends base.html % block title %The current time% endblock % block content %It is now current_date .% endblock %再为 hours_ahead 视图创建一个模板,看起来是这样的:% extends base.html % block title %Future time% endblock % block content %In hour_offset hour(s), it will be next_time .% endblock %看起来很漂亮是不是?每个模板只包含对自己而言 独一无二 的代码。无需多余的部分。如果想进行站点级的设计修改,仅需修改 base.html ,所有其它模板会立即反映出所作修改。以下是其工作方式。在加载 current_datetime.html 模板时,模板引擎发现了 % extends %标签,注意到该模板是一个子模板。模板引擎立即装载其父模板,即本例中的 base.html 。此时,模板引擎注意到 base.html 中的三个 % block % 标签,并用子模板的内容替换这些 block 。因此,引擎将会使用我们在 block title % 中定义的标题,对 % block content % 也是如此。注意由于子模板并没有定义 footer 块,模板系统将使用在父模板中定义的值。父模板 %block % 标签中的内容总是被当作一条退路。继承并不改变 context 的工作方式,而且你可以按照需要使用多层继承。使用继承的一种常见方式是下面的三层法: 1. 创建 base.html 模板,在其中定义站点的主要外观感受。这些都是不常修改甚至从不修改的部分。 2. 为网站的每个区域创建 base_SECTION.html 模板(例如, base_photos.html 和base_forum.html ) 。这些模板对 base.html 进行拓展,并包含区域特定的风格与设计。 3. 为每种类型的页面创建独立的模板,例如论坛页面或者图片库。这些模板拓展相应的区域模板。这个方法可最大限度地重用代码,并使得向公共区域(如区域级的导航)添加内容成为一件轻松的工作。以下是使用模板继承的一些诀窍: 如果在模板中使用 % extends % ,必须保证其为模板中的第一个模板标记。否则,模板继承将不起作用。 一般来说,基础模板中的 % block % 标签越多越好。记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。俗话说,钩子越多越好。 如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个% block % 中。 如果需要获得父模板中代码块的内容,可以使用 block.super 变量。如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了。11urls中的patterns接受的第一个参数正是后面模板对应处理函数的前缀,如:urlpatterns = patterns(,url(rblog/index/$,blog.views.index),)等同于urlpatterns = patterns( blog.views ,url(rblog/index/$,index),)数据库1. models中定义类时,加入的_str_(self)方法是告诉系统如何将对象当做字符串使用。2.2.models.objects.all()用于查询该类中所有的数据,返回一个QuerySet。 Model.objects.filter()用于查找特定信息下的数据,括号中填入查找信息,如:name=John.还可利用Django中的一些小魔法进行模糊搜索,就像Python善用双下划线,filter中填入name_contains=Jo就能找到John的相关信息。另外还有:_icontains:忽略大小写;_startwith,_endwithy以XX开始或结束。(正如contains,加i为不区分大小写)_exact:全部内容精确查找?(区别contain为部分包含的查找)_iexact:不区分大小写。_gt_,gte,_lt,_lte:相当于大于,大于等于,小于,小于等于。用于整形和浮点型的比较。_in:筛选出包含列表中指定内容中任意一项的数据,如name_in=tuo,luo。_range start_date = datetime.date(2005, 1, 1) end_date = datetime.date(2005, 3, 31) Entry.objects.filter(pub_date_range=(start_date, end_date)这是个选出日期在2005年1月1日到2005年3月31日之间的信息,当然,你也可以用在number中。Range中三个参数(开始,结束,步数)。_year,_month, _day对 date/datetime 类型严格匹配年、月或日:# Year lookupEntry.objects.filter(pub_date_year=2005)# Month lookup - takes integers Entry.objects.filter(pub_date_month=12)# Day lookup Entry.objects.filter(pub_date_day=3)_isnull:返回是否为空的数据,如:name_isnull=False返回姓名不为空的人的数据还可利
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 货物供应年度合同范本
- 监控施工转让合同范本
- 物业分期合作合同范本
- 行政位与酒店协议合同
- 药品承包销售合同范本
- 网吧承包装修合同范本
- 省大区域经理合同协议
- 郑州购房网签合同范本
- 运输资质借用合同范本
- 灵工签约个人合同范本
- 2024甘肃会考信息技术试题
- 2025秋青岛版(五四制)2024三年级上册科学期中检测卷(附参考答案)
- 2025广东深圳市罗山科技园开发运营服务有限公司第二批招聘4人笔试考试参考试题及答案解析
- 2025云南宣富高速楚雄市东南绕城高速元绿高速那兴高速高速公路收费员招聘341人笔试历年参考题库附带答案详解
- 2025医院安全隐患排查治理专项行动的实施方案(详细版)
- 彼得·蒂尔:硅谷教父的叛逆人生
- 2025外研版新教材英语七年级上册单词表(复习必背)
- 四级手术术前多学科讨论制度(2025年)
- 艺术设计专业英语李洪春教学课件全套
- 小学科学项目式学习教学设计案例
- 压铸模具基础知识培训课件
评论
0/150
提交评论