您的位置:首页 > 编程语言 > Go语言

django入门笔记4- template

2013-05-01 09:14 423 查看
模版的配置

1.在settings中

TEMPLATE_DIRS= (

'/home/django/mysite/templates',

)

或者

TEMPLATE_DIRS= (

os.path.join(os.path.dirname(__file__),'templates').replace('\\','/'),

)

2.渲染模版的快捷方式

return render_to_response('current_datetime.html', {'current_date': now})

或者(locals包含了所有当前的变量,包括request,内容相当庞大,但是很省事,有利有弊)

return render_to_response('current_datetime.html', locals())

模版的互相引用,当一个部分有重合的时候,可以使用这种方法

{%include "nav.html" %}

模版的继承

1.定义

<!DOCTYPEHTML PUBLIC "-//W3C//DTDHTML 4.01//EN">

<htmllang="en">

<head>

<title>{%block title %}{% endblock %}</title>

</head>

<body>

<h1>Myhelpful timestamp site</h1>

{%block content %}{% endblock %}

{%block footer %}

<hr>

<p>Thanksfor visiting my site.</p>

{%endblock %}

</body>

</html>

2.使用

{%extends "base.html" %}

{%block title %}The current time{% endblock %}

{%block content %}

{{ block.super }}

<p>Itis now {{ current_date }}.</p>

{%endblock %}

模版中的变量,当使用{{ foo.bar }}的时候,查询顺序是:

字典类型查找 (比如 foo["bar"] )

属性查找 (比如 foo.bar )

方法调用 (比如 foo.bar() )

列表类型索引查找 (比如 foo[bar] )

模版标签

{%if %} 和 {% endif %}

1.如果有多个判定逻辑使用多层嵌套的方式解决,不要多个and连用

{%if athlete_list %}

{%if coach_list or cheerleader_list %}

2.并没有 {% elif %} 标签, 请使用嵌套的`` {% if %}`` 标签来达成同样的效果

{%for athlete in athlete_list %}

<p>{{athlete.name }}</p>

{%empty %}

<p>Thereare no athletes. Only computer programmers.</p>

{%endfor %}

1.{%empty%}标签是for特有的当元素列表为空的判断

2.for没有退出循环和continue标签,只能通过内部的标志位来跳过语句的执行

3.for提供的便捷计数器

forloop.counter

forloop.counter0

forloop.revcounter0#还剩下多少个

forloop.first#是否是第一个,布尔值

forloop.last#是否是最后一个

{{forloop.parentloop.counter }} 加上一个parentloop可以得到上个循环的内容,

{%ifequal user currentuser %}

<h1>Welcome!</h1>

{%endifequal %}

1.判断两个变量是否相等

{#This is a comment #}

单行注释

{%comment %}

Thisis a

multi-linecomment.

{%endcomment %}

多行注释

{%autoescape off %}

Hello{{ name }}

{%endautoescape %}

一段文字不转意输出

常用过滤器

{{name|lower }} 小写

{{my_list|first|upper }} 把第一个字母转换为大写

{{bio|truncatewords:"30" }}只显示30个单词

{{pub_date|date:"F j, Y" }} 格式化时间

{{var | length }} 字符串的长度

{{var | safe }} 直接输出不转意

在逻辑判定中表示false

列表([] )

空元组(() )

空字典({} )

空字符串('' )

零值(0 )

特殊对象None

对象False(很明显)

通用上下文的配置

1.settings里面配置

TEMPLATE_CONTEXT_PROCESSORS= (

'django.core.context_processors.auth',

'django.core.context_processors.debug',

'django.core.context_processors.i18n',

'django.core.context_processors.media',

)

2.定义相应的上下文生成函数

defcustom_proc(request):

"Acontext processor that provides 'app', 'user' and 'ip_address'."

return{

'app':'My app',

'user':request.user,

'ip_address':request.META['REMOTE_ADDR']

}

3.直接在模版中使用即可

自定义标签过滤器

1.在app目录下(和views平行)创建一个django的包:templatetags

2.一个简单的过滤器内容如下,在目录下创建一个py文件custom_filter.py

from django import template

import settings

register = template.Library()

@register.filter(name="formate_status")

def formate_status(value):

return settings.STATUS_LIST[value]

3.在模版页面中

{%load custom_filter %}

{{ t.status|formate_status }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: