1) 新建一个django项目, django-admin.py startproject mysite (ubuntu下django-admin不用带.py后辍)。
2) 启动web服务,python manage.py runserver。
3) views.py的典型格式:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world")
4) 在python语言中,字典类型的对象,其属性不能通过点号直接引用,只能通过[]或get()方法来引用,但在模板引擎中,字典类型对象却是可以通过点号引用的。
句点查找规则可概括为: 当模板系统在变量名中遇到点时,按照以下顺序尝试进行查找:
- 字典类型查找 (比如 foo["bar"] )
- 属性查找 (比如 foo.bar )
- 方法调用 (比如 foo.bar() )
- 列表类型索引查找 (比如 foo[bar] )
5) 因为在模板中点号会依次尝试查找不同的用法,有可能无意中调用对象的方法而不是属性,引起意料外的危险。避免这种危险,需要在声明方法时,给方法定义alters_data=True,这样,在模板系统中就不会用方法调用的方式来解析点号了。
def delete(self):
# Delete the account
delete.alters_data = True
6) {% if %} 标签不允许在同一个标签中同时使用 and 和 or ,因为逻辑上可能模糊的。多个and或多个or是可以的,但不能混用。也不能用()来组合逻辑运算符,如果一定要组合,你可以将逻辑放到c里去判断,不要放到v里。或者你也可以多嵌套几层if。
7) 有{% else %},但没有 {% elif %} 标签, 请使用嵌套的`` {% if %}`` 标签来达成同样的效果。
8) for在模板系统中的用法。在标签中在入reversed,可以使列表反向迭代。使用{% empty %}分句,还能给for加上列表为空的分支。
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
{% for athlete in athlete_list reversed %}
...
{% endfor %}
{% for athlete in athlete_list %}
<p>{{ athlete.name }}</p>
{% empty %}
<p>There are no athletes. Only computer programmers.</p>
{% endfor %}
9) Django不支持退出循环操作。 如果我们想退出循环,可以改变正在迭代的变量,让其仅仅包含需要迭代的项目。 同理,Django也不支持continue语句,我们无法让当前迭代操作跳回到循环头部。
10) 在每个`` {% for %}``循环里有一个称为`` forloop`` 的模板变量。这个变量有一些提示循环进度信息的属性。
forloop.counter\forloop.counter0\forloop.revcounter\forloop.revcounter0\forloop.first\forloop.last\forloop.parentloop
11) django不希望在模板里有太多逻辑判断,所以不支持python的语法。但模板提供常用的比较功能,用{% ifequal %}和{% endifequal %}。和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签。值得注意的是,只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数,其他任何类型,例如Python的字典类型、列表类型、布尔类型,不能用在 {% ifequal %} 中。
12)模板中单行注释使用 {# #},多行注释用{% comment %}和{% endcomment %}。
{# This is a comment #}
{% comment %}
This is a
multi-line comment.
{% endcomment %}
13)模板中有过滤器的概念。过滤器使用管道字符。常用的过滤器有:addslashes、date、length、pluralize(如果是英文,会自动根据单复数决定是否添加成复数形式)、lower、yesno。
<p>{{person.is_available | yesno: "Yes,No"}}</p>
14)渲染模板的快捷方法。
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})
15) locals()方法可以简化渲染时需传递的字典。
def current_datetime(request):
now = datetime.datetime.now()
return render_to_response('current_datetime.html', {'current_date': now})
和以下方法效果等同
def current_datetime(request):
current_date = datetime.datetime.now()
return render_to_response('current_datetime.html', locals())