概述
本文接 python-django案例-显示用户名列表 ,要实现以下功能:
点击“admin”,打开新页面,在新页面里显示该用户的详细信息,如下图:
此功能很常见:
- 如:在淘宝商品列表页面点击某个商品,显示该商品的详细信息页面
- 如:在腾讯视频、爱奇艺网站里,点击某个视频链接,观看该视频
实现此功能的关键在于:点击admin时,访问一个url,该url后面带有参数,该参数就是admin这条记录的id(即:数据库中的主键),然后在视图函数中,获取该id,通过模型查询id这条记录,加载模板,并将该记录显示到模板上
1. 修改用户列表页面
修改用户列表页面,在用户名增加超链接,核心代码如下:
{%for item in users%}
<li><a href='/showuser?id={{item.id}}'>{{item.username}}</a></li>
{%endfor%}
超链接url是:showuser?id={{item.id}},也就是说我们要将urlshowuser配置到路由中,后面的?id={{item.id}},是给url传递的参数,在解析模板时,会显示真正的id
思考:为什么根据id查询用户信息?
2.实现视图函数
在该视图函数中,操作步骤如下:
- 要获取url中的参数id
- 根据id调用模型查询用户信息
- 加载模板,将用户信息传给模板
- 将模板解析后的html代码发送给浏览器
打开blog/views.py文件,增加如下代码:
def showuser(request):
#获取url中的参数
id=request.GET.get("id")
user=User.objects.get(pk=id)
return render(request,'blog/showuser.html',{'user':user})
获取参数参见:http://www.malaoshi.top/show_1EF2uD9KjU9n.html
3. 配置路由
打开myweb/urls.py文件,将url和上面的视图函数映射
url(r'^showuser$', views.showuser),
注意:
匹配的地址是:http://ip:port/showuser,后面可以有url传统参数,但不可以有其他部分,如:/
参见链接:http://www.malaoshi.top/show_1EF2uD9KjU9n.html
测试
配置好后,启动服务器,测试路由和视图函数,是否能够获取url的参数
4.实现模板
在模板中显示用户名、密码,用户名、密码是由视图函数传递过来的
在文件夹templates/blog文件夹下创建showuser.html文件,核心代码如下:
用户名:{{user.username}}<br/>
密码:{{user.password}}
测试
启动服务,打开浏览器访问http://localhost:8000/userlist ,结果如下图:
点击“admin”,弹出界面如下:
注意url部分
改进
路由改为
url(r'^showuser$', views.showuser,name='showuser'),
模板改为
{%for item in users%}
<li><a href='{% url 'showuser' %}?id={{item.id}}'>{{item.username}}</a></li>
{%endfor%}
