Django 查漏补缺(持续更新)
常用命令:
- Django-admin startproject xxx
- Python manage.py startapp xxx
- Python manage.py createsuperuser
- Python manage.py runserver
- Pip insatll virtualenv
导出和导入pip list
- pip freeze > requirements.txt
- pip install -r requirements.txt
1、url传参 article/<int:article_id>
<参数转换类型:参数>
2、获取数据如果没有返回404页面
get_object_or_404(模型,条件)
3、获取主键
主键有时候可能不叫id,但是主键一定叫pk
Model.object.get( pk=1 )
4、url别名
未使用:
使用别名:
{% url ‘别名’ id %}
5、admin注册模型
6、Django使用MySQL修改__init__
7、admin修改
通过继承admin.ModeAdmin类对样式进行修改。
注册可以使用装饰器
8、已存在内容数据库增加新字段
需要设置默认值
(时间字段)
Auto_now_add:添加内容时间
Auto_now:最后修改时间
(外链字段)
添加作者字段,使用django内置user表
默认值default设置为第一个admin用户
On_delete = model.DO_NOTING:删除文章时不对外键进行操作
(布尔字段和数字字段)
9、时间区域修改
settings.py中
TIME_ZONE = 'UTC' 改为:
TIME_ZONE = 'Asia/Shanghai'
10、过滤器
{{ blogs|length }} :显示长度
{{ content|truncatechars:30 }} #所有内容只显示30个字符==overflow
{{ blog.time|date:’Y-m-d G:n:s’ }} #时间格式化,G/H:24小时 h:12小时
{# xxxxxxxx #} #注释
{{ for blog in blogs }}
{{ empty }}
Xxxxxx #如果for循环为空,显示此内容
{{ endfor }}
11、一对多,多对多查询
12、通过get请求方式传递参数
比如商品详情页
- 通过正则
<a href=’/goods/list/{{ goods.id }}’><a> ==> re_path(’/goods/list/(\d+)’,goodlist)
- 通过标签:
<a href=’/goods/list/{{ goods.id }}’><a> ==> path(’/goods/list/<int:page>’,goodlist)
- 通过get请求:
<a href=’?page={{ goods.id }}’><a> ==> path(’/goods/list/’,goodlist) ==> page=request.GET.get(‘page’)
13、分页
From django.core.paginator import Paginator
详细参数:
import os
from django.core.paginator import Paginator
objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br>
p = Paginator(objects,3) # 3条数据为一页,实例化分页对象
print p.count # 10 对象总共10个元素
print p.num_pages # 4 对象可分4页
print p.page_range # xrange(1, 5) 对象页的可迭代范围
page1 = p.page(1) # 取对象的第一分页对象
print page1.object_list # 第一分页对象的元素列表['john', 'paul', 'george']
print page1.number # 第一分页对象的当前页值 1
page2 = p.page(2) # 取对象的第二分页对象
print page2.object_list # 第二分页对象的元素列表 ['ringo', 'lucy', 'meiry']
print page2.number # 第二分页对象的当前页码值 2
print page1.has_previous() # 第一分页对象是否有前一页 False
print page1.has_other_pages() # 第一分页对象是否有其它页 True
print page2.has_previous() # 第二分页对象是否有前一页 True
print page2.has_next() # 第二分页对象是否有下一页 True
print page2.next_page_number() # 第二分页对象下一页码的值 3
print page2.previous_page_number() # 第二分页对象的上一页码值 1
print page2.start_index() # 第二分页对象的元素开始索引 4
print page2.end_index() # 第2分页对象的元素结束索引 6
使用:视图函数
前端页面:
取东西通过customer来获取
分页代码:
分页最多显示5页,默认显示第一页和最后一页,分页的页码可以写在setting中。
前端页面修改页码循环为page_range:
效果:
14、上一篇下一篇
视图:
前端:
效果:
15、排除exclude
除了主键等于3的其他项