一、URL
路由匹配
# 使用url给视图函数传参数
# 在url配置中将正则部分小括号括起来,比如:
url(r'^time/plus/(\d{1,2})/$', views.hours_ahead)
# 如果有多个参数则用/隔开,参数需要用分组,比如:
url(r"^time/plus/(\d{1,2})/(\d{1,2})/$",views.hours_ahead)
# 给参数命名,使用正则分组的别名,比如:
ulr(r'^time/plus/(?P<time1>\d{1,2})/(?P<time2>\d{1,2})/$',views.hours_ahead)
# 使用分组别名之后,视图函数必须用分组的别名,但是位置可以不固定。
# 给url取别名,那么在使用url的地方可以使用别名。比如:
url(r"^buy/$", views.buy, name='buy')
url(r"^login/$", view.login, name='login')
反向解析
# 在视图函数中,反向解析url:
from django.shortcuts import render, redirect
from django.urls import reverse
def buy(request):
return redirect(reverse("index"))
return redirect(reverse('detail', args=[2]))
return redirect(reverse("detail", kwargs={"id": 2}))
# 在templates中,使用别名:
{% url 'detail' stu.id %}
# 使用命名空间:
# 在工程的urls.py文件中,在include时,可以指定命名空间,更加细化的划分url。比如:
url(r"^App/", include("App.urls", namespace='App'))
# 指定命令空间后,使用反向解析时需要加上命名空间,比如:
return redirect(reverse('students:index'))
# 在模板中templates
{% url 'student:detail' %}
定制admin
通过定义ModelAdmin来定制model在admin的显示,例如:
class AuthorAdmin(admin.ModelAdmin):
list_display = ("first_name", "last_name", "email")
admin.site.register(Author, AuthorAdmin)
给Author添加一个搜索框:
search_fields = ("first_name", "last_name")
给book添加一个过滤器
list_filter = ("publication_date")
过滤器不光可以作用在日期字段上,还可以作用在boolean类型和外键上。
另一种增加日期过滤的方式:
date_hierarchy = 'publication_date'
字段排序:
ordering = ("-publication_date")
修改编辑页面显示的字段及显示顺序,默认按照models中字段的定义顺序显示:
fields = ("title", "authors", "publisher", 'publication_date')
与fields相反的字段是exclude
exclude = ['publication_date',]
改善多对多关系中对象选择操作,比如给BookAdmin添加如下属性:
filter_horizontal = ('authors',)
filter_horizontal和filter_vertical 选项只适用于多对多关系。
一对多的外键关系,admin使用select box下拉菜单来表示。如不想用select box,可添加如下属性,让原来一次性加载所有publisher的select box变成填写publisher的id:
raw_id_fields = ('publisher',)
让字段分组显示,fieldsets和上面提到的field不能同时出现:
fieldsets = (
('作者', {'fields': ('authors',)}),
('出版商', {'fields': ('publisher',)}),
)
定制list_display字段的显示。比如给Author加一个布尔型gender字段,来表示性别。为了让显示更加人性化:
# 定制显示属性
def showgender(self):
if self.gender:
return '男'
else:
return '女'
list_display = ('first_name', 'last_name', 'email', showgender)
给该函数设置简短描述,让显示更加友好:
showgender.short_description = '性别'
可以将modeladmin的属性简单划分为列表页属性和添加、修改页属性
列表页属性
list_display,list_filter,search_fields,list_per_page
等
添加、修改页属性
fields ,fieldsets, filter_horizontal, raw_id_fields
等