目录
render调用页面时,无法执行相应views.py中的代码
模型类中条件查询filter返回值问题
将表单传来的key值作为数据表title字段的查询条件

即使数据库中符合条件的只有一行数据,最外层也会有一个QuerySet类数组来包裹。即list不是Message类,需要list[0]将Message取出,如果需要输出查询的数据title字段的值,就如下图(Message类中定义了title属性)

获取到类名list[0]后,访问属性值就不言而喻了。
Django分页的GET与表单的POST冲突
众所周知Django分页较为容易的是使用查询字符串?page=x来传递当前页的,是一个GET请求,可如果分页的对象是表单经POST提交之后的页面呢,点击页码后通过GET请求来刷新页面,显然会报错。
我的思路是表单提交后将关键信息记录到文件中去,这样即使点击页码后,也能通过读取文件的方式来重新获取关键信息,可在类中进行是否post的判断:
if(request.method == 'POST'):
f = open('XunLu_details/doc/keyword.txt','w')
f.write(request.POST['key'])
f.close()之后只要是刷新页面均从该文件获取关键信息,

通过这种方式将信息按关键字查询并将数据data传入分页Paginator类中

VS编译器中自带的html页面中文乱码
在自带的html页面中加入中文会报错UnicodeDecodeError。
首先确保vs与浏览器的编码格式是utf-8,可能该html页中延用了之前的编码格式,将此页删除再创建即可(复制粘贴便可)。
render调用页面时,无法执行相应views.py中的代码
在首页的控制层中有很多逻辑判断的代码,可是如果直接执行如下语句,这些代码都不会起作用:
return render(request,'app/index.html')可以考虑引入django.http.HttpResponseRedirect来改变url,这样通过以配置好的路由来加载页面:
return HttpResponseRedirect('/')#默认路由即为首页附:判断session有无某关键字(in/not in):
#每一次返回首页需要超链接或重定向更改地址,不能用render
#session中若无值阻止报错
if('username' not in request.session):
#将session赋予默认值,其中空值则显示默认图片
request.session['username'] = '请先登录'
request.session['userIcon'] = 'Xunlu/images/noUser.jpg'登录后显示用户头像(session)
首先登录后再session添加userIcon关键字(django默认是支持session的,详见下方参考链接):
if(userList.password == request.POST['password']):
request.session['username'] = userList.username
request.session['userIcon'] = str(userList.icon)
return HttpResponseRedirect('/')python中将session值作为一个字典来处理
前台调用session:
<li><a href="/admin"><img class="userImg" src="{%static request.session.userIcon%}" alt="用户头像" /></a></li>
<li><a href="/" style="color:black;">欢迎您,小技巧:当登录为空值时,可给session一个默认值,实现无用户登录时的默认图片:
request.session['username'] = '请先登录'
request.session['userIcon'] = 'Xunlu/images/noUser.jpg'Django中使用session
https://blog.csdn.net/zy010101/article/details/121065864
通过字典实现ORM filter动态修改字段名进行查询
条件查询的代码:
#根据条件筛选
if(hasCondition):
if(conditionOp == '<'):
#可通过字典类型来灵活设定查询字段
dict = {conditionKey+'__lte':conditionValue}
elif(conditionOp == '>'):
dict = {conditionKey+'__gte':conditionValue}
else:
dict = {conditionKey:conditionValue}
data = data.filter(**dict).order_by('-hits')分了三种情况,对应三个字典,它们分别是:
{"hits__lte":10}
{"hits__gte":10}
{"hits":10}
filter里面用**dict调用字典,分别等价于:
filter(hits__lte=10)
filter(hits__gte=10)
filter(hits=10)
回退到首页时,显示历史搜索的关键字
之前说到关键字被我们存在了一个文件doc/keyword.txt中,只需要返回时传入一个参数,首页来判断若该参数存在便将文件内容读入显示即可,具体代码如下:
详情页--以history作为历史参数
<div class="col-md-9">
迅鹿为您找到{{count}}个相关网页 <a href="/?history=True">返回首页</a><br />首页后端--
#判断是否需要记录历史查询
if('history' in request.GET):
if(request.GET['history']):#是布尔类型
#读取文件记录,获取最近查询的关键字
with open('XunLu_details/doc/keyword.txt','r') as f:
historyKey = f.read()