动态URL
在urls.py中以通配符来实现
urlpatterns = patterns('', (r'^hello/$', hello), (r'^time/$', current_datetime), (r'^time/plus/(\d{1,2})/$', hours_ahead),)
def showNumber(request,num):#num是匹配值 try: NUM = int(num) except ValueError: raise Http404() return HttpResponse('number is %d' %NUM)
context
#coding:utf8from django.template import Template,Contextperson ={ 'name':'eric','age':20,'sex':'man'}c = Context({ 'person':person})#将字典person转换成Contextt = Template('{ {person.name}} age is { {person.age}} he is { {person.sex}}')print t.render(c)
forloop
- forloop 属性统计当前循环次数
{% 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。
- forloop.first 是一个布尔值,如果该迭代是第一次执行,那么它被置为True
- forloop.last 是一个布尔值;在最后一次执行循环时被置为True
- forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)。 例子在此:
{% for country in countries %}
Country #{ { forloop.parentloop.counter }} | City #{ { forloop.counter }} | { { city }} |
ifequal
- 如果相等显示中间代码
{% ifequal section 'sitenews' %}Site News
{% endifequal %}{% ifequal section "community" %}Community
{% endifequal %}
只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数
{% ifequal variable 1 %}{% ifequal variable 1.23 %}{% ifequal variable 'foo' %}{% ifequal variable "foo" %}
多行注释
{ % comment %}This is amulti-line comment.{ % endcomment %}
过滤器
#将列表的第一个元素大写{ { my_list|first|upper }}#显示变量的前30个词{ { bio|truncatewords:"30" }}#格式化字符串{ { pub_date|date:"F j, Y" }}addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。 这在处理包含JavaScript的文本时是非常有用的。
绝对路径设置
'DIRS': [os.path.join(BASE_DIR, 'templates')],import os.pathTEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),)# BASE_DIR 、os.path.dirname(__file__)都是获取当前文件路径
载入模板文件,Context渲染
def current_datetime(request): now = datetime.datetime.now() t = get_template('current_datetime.html')#获取模板文件 html = t.render(Context({ 'current_date': now})) return HttpResponse(html)
include模板标签
用于减少代码重复
# mypage.html{% include "includes/nav.html" %}{ { title }}
# includes/nav.html
模板继承
- base.html
{% block title %}{% endblock %} My helpful timestamp site
{% block content %}{% endblock %} {% block footer %}
Thanks for visiting my site.
{% endblock %}
- 子模板1
{% extends "base.html" %}{% block title %}The current time{% endblock %}{% block content %}It is now {
{ current_date }}.{% endblock %}
- 子模板2
{% extends "base.html" %}{% block title %}Future time{% endblock %}{% block content %}In {
{ hour_offset }} hour(s), it will be { { next_time }}.{% endblock %}