模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
from django import template
t = template.Template('My name is {{ name }}.')
c = template.Context({'name': 'Adrian'})
print t.render(c)
import datetime
from django import template
import DjangoDemo.settings
now = datetime.datetime.now() fp = open(settings.BASE_DIR+’/templates/Home/Index.html’) t = template.Template(fp.read()) fp.close() html = t.render(template.Context({‘current_date’: now})) return HttpResponse(html)
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime
def current_datetime(request): now = datetime.datetime.now() t = get_template(‘current_datetime.html’) html = t.render(Context({‘current_date’: now})) return HttpResponse(html)
def extra(self,select=None,where=None,params=None,tables=None,order_by=None,select_params=None)
where ---------params
select ----------select_params
# def gets(request):
# models.UserInfo.objects.extra(where=['headline=%s'],params=[1,])
# #where 和 params 配合使用
# models.UserInfo.objects.extra(where=["foo='a' OR bar='a',baz='a"])
# #查询条件是foo和baz等于a 或者bar和baz等a
# models.UserInfo.objects.extra(select={'new_id':"select id from tb where id>%s"},select_params=(1,),order_by=['-nid'])
# #查询id大于1并以降序排列
extra 演示
八、连表
1、对象连表
# models.UserInfo.objects.all()
#查看UserIinfo表的所有行
# models.UserInfo.objects.filter(id=2)
##查看UserInfo表id等于2的哪一行内容
# result = models.UserInfo.objects.all()
##通过此方式返回一个列表中存放的是对象(object)
# for row in result:
# print(row.name,row.id,row.age,row.ut.title)
##以是对象的方式进行连表
2、字典连表
# models.UserInfo.objects.all()
## 查看表的所有行
# models.UserInfo.objects.filter(id=1)
##查看表的id是1的行
# result=models.UserInfo.objects.all().values('id','name','ut__title')
##通过此方式连表返回个列表,列表中存放的是字典对象(dict)
# for row in result:
# print(row)
3、元组连表
# models.UserInfo.objects.all()
## 查看表的所有行
# models.UserInfo.objects.filter(id=2)
##查看表的id是2的行
# result=models.UserInfo.objects.all().values_list('id','name','ut__title')
##通过此方式连表返回个列表,列表中存放的是元组对象(tuple)
# for row in result:
# print(row)
九、正反向查找
result = models.UserInfo.objects.all()
for obj in result:
print(obj.name,obj.age,obj.ut_id,obj.ut.title)
#打印obj对象的名字,对象的年龄,对象的外键,ut设置外键的列就是相当于ut表对应的主键(现在拿到就是ut那个表可以拿ut对应的一行所有内容)
result = models.UserInfo.objects.all().first()
##获取表中所有的行但只是拿第一个对象,也就是第一行
print(result.name,result.age,result.ut)
对象正向查找
# obj = models.UserType.objects.all().last()
# print('用户类型',obj)
# for row in obj.userinfo_set.all():
# print(row.name,row.age)
# user_list = models.UserInfo.objects.all().order_by('-id')
# ##排序默认的升序,order_by('-id')是降序
# for i in user_list:
# print(i.name,i.id)
# return HttpResponse('....')
ss =models.UserInfo.objects.all().order_by('-id','age').reverse()
print(ss.query)
'''
SELECT "appo1_userinfo"."id", "appo1_userinfo"."name", "appo1_userinfo"."age", "appo1_userinfo"."ut_id" FROM "appo1_userinfo" ORDER BY "appo1_userinfo"."id" ASC, "appo1_userinfo"."age" DESC
‘’’
# 将设置的排序方式进行反转,本来id是降序,age是升序,反转后id 是升序,age是降序
排序 演示
十一、annotate(组合)
def annotate(self,*args,**kwargs):
#用于实现聚合group by查询
from django.db.models import Count,Avg,Max,Min,Sum
v = models.UserInfo.objects.values('ut_id').annotate(wsa=Count('ut_id'))
print(v.query)
'''
SELECT "appo1_userinfo"."ut_id", COUNT("appo1_userinfo"."ut_id") AS "uid" FROM "appo1_userinfo" GROUP BY "appo1_userinfo"."ut_id"
‘’’
十二、转化成sql语句
v = models.UserInfo.objects.values('ut_id').annotate(wws=Count('ut_id')).filter(ut_id__gt=2)
print(v.query)
<br>SELECT "appo1_userinfo"."ut_id", COUNT("appo1_userinfo"."ut_id") AS "wws" FROM "appo1_userinfo" WHERE "appo1_userinfo"."ut_id" > 2 GROUP BY "appo1_userinfo"."ut_id"
class UtU(models.Model): g=models.ForeignKey(‘UserInfo’,null=True,related_name=‘boy’) b=models.ForeignKey(‘UserInfo’,null=True,related_name=‘grily’)
重点在于related_name 这样就相当于给他们设置了别名,数据库就不会分不清谁是谁的关联
def indexss(request):
tt=models.UserINfo.objects.filter(id=2).first()
xx = tt.userinfo_set.all()
## 反向查看关系自关联的表
for i in xx:
print(i.nickname)
return HttpResponse('ok')
def indexsz(request):
tt = models.UserINfo.objects.filter(id=2).first()
# 正向查看自关联表的内容
xx =tt.m.all()
# 获取到和UserINfo相关的UserINfo对象
for i in xx:
print(i.nickname)
return HttpResponse('ok')
正向查看ManyToManyField自关联的信息
def indexs(request):
tt =models.UserINfo.objects.filter(id=2).first()
ss=tt.userinfo_set.all()
print(ss)
for i in ss:
print(i.nickname)
def indexss(request):
xx =models.User.objects.filter(id=1).first()
xs =models.User.objects.filter(id=2).first()
tt =xx.xxx.all()
ts =xs.xxx.all()
for i in tt:
print(i.new_content)
for i in ts:
print(i.new_content)
return HttpResponse('ok')