ad

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.8.5 函数视图操作

网友投稿 130 2023-11-07

【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第2章,第8节,由陈刚、王洪军编著。

2.8.5 函数视图操作 ORM (显示 board 列表)

① 在 bbs/views.py 里新增一个 boards_list 函数。

https://github.com/aguncn/django_demo_project/blob/master/bbs/views.py

01 def boards_list(request):

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.8.5 函数视图操作

02 boards =Board.objects.all()

03 return render(request,'bbs/boards_list.html',{'boards':boards})

代码解释:

第2行:使用使用objects 管理器的 all 方法,获取 Board 表中的所有记录。如果 读者会使用 SQL, 这条 ORM 略相当于[SELECT id,name,description FROM Board]。

第3行:使用 render 这个快捷方法,渲染 boards_list.html 模板,传递一个

boards 上下文,而此上下文,就是第2行的列表。

② 在 bbs/templates/bbs/ 下,新增一个上文提到的模板文件 boards_list.html。

https://github.com/aguncn/django_demo_project/blob/master/bbs/templates/bbs/boards

list.html

01

02 boards_list

代码解释:

这里,我们以最简单的方式,实现了一个显示所有 board 名称及描述的列表。

第9~13行:实现了循环读取每一条 board 的功能。for 标签功能见表2-1。

第10行:显示指定的 board 的 URL, 在下一小节实现,写法参照2.6.2小节理 解。注意,我们为这个 URL 指定了一个参数,这个参数是需要名为 board_topics 的 URL 来捕获的。

第11~12行:{{ board.id }}这样的模板变量,用于显示 board 的 id、名称及 描述。

③ 在 django_demo_project/ 里,新增一条 URL 路由实例。

https://github.com/aguncn/django_demo_project/blob/master/django_demo_project/ urls.PY

01 urlpatterns =[

02

03 path('boards_list/',bbs_view.boards_list,name=boards_list'),

04

05

④ 在浏览器里访问http://127.0.0.1:8000/boards_list/, (因为我们在2.8.4小节中,已加了这些数据)。

<→C ① 127.0.0.1:8000/boards_list/

效果如图2-13所示

1.Java

● build windows,run on linux.

life is short,use python.

图2 - 13 使用Django视图、模型、模板和路由功能实现的 Hello 网页2.8.6 函数视图操作 ORM (显示指定 board 的 topic 列表)

① 在 bbs/views.py 里新增一个 board_topics 函数。

https://github.com/aguncn/django_demo_project/blob/master/bbs/views.py

01 def board_topics(request,pk):

02 board =Board.objects.get(id =pk)

03 topics =board.topics.all()

04 return render(request,

05 'bbs/board_topics.html',

06 ('board':board,'topics':topics})

代码解释:

第1行:由于我们在此函数的 URL 中捕获了一个 pk 参数,所以,将其传递到了

函数。

第2行:使用objects 管理器的get 方法,获取指定的 board 实例。如果读者会使 用SQL, 这条 ORM 略相当于[SELECT id,name,description FROM Board where

id=pk]。

第3行:使用Topic 数据表中 board 外键的 related_name(topics), 获取了指定 board 的所有 topic.

第4行:使用 render 这个快捷方法,渲染 board_topics.html 模板,传递一个 board 及 topics 上下文。

② 在 bbs/templates/bbs/ 下,新增一个上文提到的模板文件 board_topics.html。

https://github.com/aguncn/django_demo_project/blob/master/bbs/templates/bbs/board

topics.html

代码解释:

第2行:发贴功能,在接下来实现。

第15~26 行:实现了循环读取每一条 topic 的功能。

第19行:显示指定的 topic 内容的 URL, 并为这个 URL 传递了两个参数。

第22行:{{ topic.starter.username }}这样的模板变量,用于显示 topic 中的 starter 这个外键数据表中的username 字段名称(即 User 数据表的usrname 名称)。 这种写法,希望读者能学习好,因为它可以支持更长的链式写法,灵活地在网页上显 示指定的内容。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_3.5.2 远程执行脚本命令
下一篇:《自己动手写 Python 虚拟机》_更理解虚拟机的意义_6.1.2 创建Function Object
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×