Django学习笔记
1、因为URLpattern提供的是“适度但有用”级别的输入校验。万一这个视图函数被其它方式调用,我们仍需自行检查ValueError。在实现视图函数时,不臆测参数值的做法是比较好的。
2、模板内不允许使用负数列表索引。像{{items.-1}}这样的模板变量将会引发”TemplateSyntaxError”。
3、在模板方法查找过程中,如果某方法抛出一个异常,除非异常有一个silent_variable_failure属性并且值为True,否则的话它将被传播。如果异常被传播,模板里的指定变量会被设置为空字符串。
4、如果BankAcount对象有一个delete()方法,某个模板中包含了像{{account.delete}}这样的标签,在这个模板载入时,account对象将被删除。要防止这样的事情发生,必须设置该方法的alters_data函数属性:
def delete(self): # Delete the account delete.alters_data = True
delete()方法不会被执行,它将静静地错误退出。
5、{% if %} 标签不允许在同一个标签中同时使用 and 和 or 。多次使用同一个逻辑操作符是没有问题的。没有 {% elif %} 标签。
6、在执行循环之前先检测列表的大小是一个通常的做法,当列表为空时输出一些特别的提示。
{% for athlete in athlete_list %} <p>{{ athlete.name }}</p> {% empty %} <p>There are no athletes. Only computer programmers.</p> {% endfor %}
7、在每个`` {% for %}``循环里有一个称为`` forloop`` 的模板变量。这个变量有一些提示循环进度信息的属性。
8、只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数。其他任何类型,例如Python的字典类型、列表类型、布尔类型,不能用在 {% ifequal %} 中。
9、模板代码注释使用 {# #} ,用这种语法的注释不能跨越多行。如果要实现多行注释,可以使用`` {% comment %}`` 模板标签,就像这样:
{% comment %} This is a multi‐line comment {% endcomment %}
10、按指定的格式字符串参数格式化 date 或者 datetime 对象, 范例: {{ pub_date|date:"F j, Y" }}
11、模板目录设置:
import os.path TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'), )
12、使用 render_to_response()
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})
13、对子模板目录树的深度没有限制,想要多少层都可以。
return render_to_response('dateapp/current_datetime.html', {'current_date': now})
14、include 模板标签:{% include 'nav.html' %}或者{% include "nav.html" %}
15、查看数据模型的SQL语句 python manage.py sqlall app1 app2 >sqlfile
16、设置字段可选:
字符型:email = models.EmailFeild(blank = True)
日期型、时间型和数字型:publication_date = models.DataField(blank = True, null = True)
17、给字段名称添加标签
email = models.EmailField('邮箱', blank = True)
特例:ManyToManyField和ForeignKey字段
authors = models.ForeignKey(Author,verbose_name = '作者')
18、如果你在django model里定义了instime = models.DateTimeField('注册时间', auto_now_add=True)
那么它默认会给instime字段设置一个日期时间的格式形式,
比如:2006-10-25 14:30:59这样我们在model里调用save的话,
他会自动添加到数据里去