时间已过久远,重新回顾了下。
从第四章开始。
模板:
变量:{{变量名}}
模板标签:{%逻辑语句(if, for 等等)%}
过滤器:{{ship_date|date:"F j, Y"}} 类似于Unix
>>> from django.template import Template, Context >>> t = Template('Hello, {{ name }}') >>> print t.render(Context({'name': 'John'})) Hello, John >>> print t.render(Context({'name': 'Julie'})) Hello, Julie >>> print t.render(Context({'name': 'Pat'})) Hello, Pat以上例子可以概括模板的使用。Template对象初始化模板,render渲染。一个模板可以对应多个上下文。
复杂对象按照如下顺序查找:
字典类型查找 (比如 foo["bar"] )
属性查找 (比如 foo.bar )
方法调用 (比如 foo.bar() )
列表类型索引查找 (比如 foo[bar] )
def delete(self): # Delete the account delete.alters_data = TrueContext对象修改和字典是一样的:
>>> from django.template import Context >>> c = Context({"foo": "bar"}) >>> c['foo'] 'bar' >>> del c['foo'] >>> c['foo'] Traceback (most recent call last): ... KeyError: 'foo' >>> c['newvariable'] = 'hello' >>> c['newvariable'] 'hello'
标签和过滤器:
1、逻辑表达式
{% if today_is_weekend %} <p>Welcome to the weekend!</p> {% else %} <p>Get back to work.</p> {% endif %}其中else是可选的。
2、循环
(1)正向迭代(empty可选,表示列表为空要做的事情)
{% for athlete in athlete_list %} <p>{{ athlete.name }}</p> {% empty %} <p>There are no athletes. Only computer programmers.</p> {% endfor %}
{% for athlete in athlete_list reversed %} ... {% endfor %}
forloop.counter 从1开始计数器
forloop.counter0 从0开始计数器
forloop.revcounter 剩余循环数
forloop.revcounter0 剩余数-1
forloop.first 是否为循环的第一个,boolean值
forloop.last 是否为循环最后一个,boolean值
forloop.parentloop 上一层循环的对象引用
如果自己定义的变量和forloop里的重复,会移到forloop.parentloop
3、比较两个值(相等:ifequal,不等:ifnotequal)
{% ifequal section 'sitenews' %} <h1>Site News</h1> {% else %} <h1>No News Here</h1> {% endifequal %}
else可选,字典类型、列表类型、布尔类型不能使用。
4、注释
{# This is a comment #}
{% comment %} This is a multi-line comment. {% endcomment %}第一个是单行,第二个是多行。
在Views中使用模板
setting.py中设置模板路径
TEMPLATE_DIRS = ( '/home/django/mysite/templates', )
import os.path TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'), )前者为绝对路径,后者为相对路径。
切换到视图,代码:
from django.template.loader import get_template from django.template import Context from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() t = get_template('current_datetime.html') html = t.render(Context({'current_date': now})) return HttpResponse(html)以上代码的简化版本:
from django.shortcuts import render_to_response import datetime def current_datetime(request): now = datetime.datetime.now() return render_to_response('current_datetime.html', {'current_date': now})locals()可以返 返回的字典对所有局部变量的名称与值进行映射,少写些代码。
模板目录的子目录:
t = get_template('dateapp/current_datetime.html')
包含其他页面:
{% include 'nav.html' %} {% include 'includes/nav.html' %} {% include template_name %}第一行包含当前目录文件,第二行为子目录,第三行为变量值(template_name)
模板继承
base.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="en"> <head> <title>{% block title %}{% endblock %}</title> </head> <body> <h1>My helpful timestamp site</h1> {% block content %}{% endblock %} {% block footer %} <hr> <p>Thanks for visiting my site.</p> {% endblock %} </body> </html>current_data.html:
{% extends "base.html" %} {% block title %}The current time{% endblock %} {% block content %} <p>It is now {{ current_date }}.</p> {% endblock %}
{% block 块名%}块的内容{% endblock %}
第二部分就到这里,模板的细节还是不少的~~