python-django案例-点击用户名查看用户详细信息

概述

本文接 python-django案例-显示用户名列表 ,要实现以下功能:

在用户列表页面,如下图:

点击“admin”,打开新页面,在新页面里显示该用户的详细信息,如下图:

此功能很常见:

  1. 如:在淘宝商品列表页面点击某个商品,显示该商品的详细信息页面
  2. 如:在腾讯视频、爱奇艺网站里,点击某个视频链接,观看该视频

实现此功能的关键在于:点击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.实现视图函数

在该视图函数中,操作步骤如下:

  1. 要获取url中的参数id
  2. 根据id调用模型查询用户信息
  3. 加载模板,将用户信息传给模板
  4. 将模板解析后的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%}

原文出处:/show_1EF2uD25J6vj.html