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())