目标

建立一个图书列表页面,显示图书名列表,并实现点击书名跳转到图书详细页面,显示图书详细信息。

  • URL方法简介

    • 功能:返回一个绝对路径的引用(不包含域名的URL);该引用匹配一个给定的视图函数和

      一些可选的参数。
    • 语法:{% url 'some-url-name' value1 value2 %}
    • 参数'some-url-name'表示在urls.py文件中的路由地址;
    • 参数value1和value2表示拼接的值,可选。
    • 例如,urls.py: url(r'^bookinfo/(\d+)/$', polls_views.bookinfo, name='book')

      html代码中:{% url 'book' 3 %};

      拼接后返回地址为:bookinfo/3/
已有数据库及信息

数据库djangodemo中存有信息:

表polls_book

+----+--------------+-----------+

| id | name | person_id |

+----+--------------+-----------+

| 1 | 围城 | 1 |

| 2 | 蝴蝶梦 | 2 |

| 3 | 鲁滨逊漂流记 | 3 |

| 4 | 小王子 | 4 |

+----+--------------+-----------+

表polls_person

+----+------+-----+

| id | name | age |

+----+------+-----+

| 1 | Joe | 12 |

| 2 | walt | 18 |

| 3 | walt | 17 |

| 4 | Jany | 20 |

| 5 | John | 29 |

+----+------+-----+

思路
  • 先写出图书列表页面
  • 实现超链接自动拼接
  • 编写图书详情页面
实现
  • 项目目录信息

  • 建立页面路由

    在urls.py文件中添加
# 导入路由,支持正则表达式
from django.conf.urls import url
# 在路由匹配模式中添加图书列表页面的路由
urlpatterns = [
url(r'^booklist/$', polls_views.booklist),
# 定义拼接地址,获取书籍信息
url(r'^bookinfo/(\d+)/$', polls_views.bookinfo, name='bookinfo')
]
  • 1. 在views.py文件中添加
# 图书列表页面控制器
def booklist(request):
# 导入图书类
from polls.models import Book
# 实例化一个图书对象
books = Book.objects.all()
# 建立空字典存储booklist
dict_book = {}
dict_book['booklist'] = books
# 向bookList.html页面传入数据dict_book
return render(request, 'bookList.html', dict_book)
  • 2. 在templates文件夹下新建bookList.html文件,并添加
{# 在bookList.html文件的body下添加如下代码 #}
<body>
<h2>图书架</h2>
<ul>
{% for book in booklist %}
{# 使用每本书的book.id作为获取详情的查询条件,生成链接 #}
<li><a href="{% url 'bookinfo' book.id %}">{{ book.name }}</a></li>
{% endfor %}
</ul>
</body>
  • 3. 在view.py文件中定义获取书籍信息详细信息的控制方法
# 获取书籍信息
def bookinfo(request, id):
# 导入图书类
from polls.models import Book
# 实例化一个图书对象,使用book.id查询该书籍数据
book = Book.objects.get(id=id)
# 建立空字典存储booklist
dict_book = {}
# 存储book书名
dict_book['book'] = book.name
# 存储book作者
dict_book['author'] = book.person.name
# 存储book作者年龄
dict_book['author_age'] = book.person.age
# 向bookInfo.html页面传入数据dict_book
return render(request, 'bookInfo.html', dict_book)
  • 4. 在templates文件夹下新建bookInfo.html文件,并添加
{# 在bookInfo.html文件的body下添加如下代码 #}
<body>
<h2>{{ book }}</h2>
<ul>
<li>作者:{{ author }}</li>
<li>年龄:{{ author_age }}</li>
</ul>
</body>
实现效果
  • 在浏览器中访问http://127.0.0.1:8000/booklist/

  • 点击“鲁滨逊漂流记

可以看出,地址栏里的127.0.0.1:8000/bookInfo/3中"3"是根据书籍“鲁滨逊漂流记”的id获取的,“鲁滨逊漂流记”在数据库表polls_book中对应的id是3。

表polls_book

+----+--------------+-----------+

| id | name | person_id |

+----+--------------+-----------+

| 1 | 围城 | 1 |

| 2 | 蝴蝶梦 | 2 |

| 3 | 鲁滨逊漂流记 | 3 |

| 4 | 小王子 | 4 |

+----+--------------+-----------+

总结
  1. 以上工作的条件是你已经完成了Django的正常配置,并正常开启了server;
  2. 数据库中的数据是预先添加好的,这里只是查询数据库中的数据。
  3. 能力有限,欢迎指错纠正。

利用Django中的url方法实现地址动态拼接自动生成超链接地址的更多相关文章

  1. django中的url控制

    1.django中的第一个控件:url控制  (路由分发) urls.py:请求路径与视图函数的之间的关系 步骤: 1.首先是要配置环境,   2.其次就是引路径   3.在视图的文件夹里面写相应的函 ...

  2. django中ModelForm save方法 以及快速生成空表单或包含数据的表单 包含错误信息

    django中ModelForm学习系列一~save方法 Model代码 from django.db import models # Create your models here. class P ...

  3. Django中多种重定向方法使用

    本文主要讲解使用HttpResponseRedirect.redirect.reverse以及配置文件中配置URL等重定向方法 本文使用了Django1.8.2 使用场景,例如在表单一中提交数据后,需 ...

  4. Django中安装搜索引擎方法。

    全文检索 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持whoosh.solr.Xapian.Elasticsearc ...

  5. django中使用POST方法 获取POST数据

    在django中获取post数据,首先要规定post发送的数据类型是什么. 1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScript发送PO ...

  6. [UnicodeEncodeError]:Django中解决URL中文解释乱码问题

    Django中在使用HttpResponseRedirect的时候,跳转URL中如果存在中文,会报错:会报UnicodeEncodeError错误. 解决办法: 使用urlquote对URL进行编码 ...

  7. 给Django中的url起名字

    url反转  =>reverse 1.from django.shortcuts  import  reverse 2. 利用reverse函数对URL名称进行反转  reverse(url名称 ...

  8. Cognos11中通过URL传参访问动态Report

    一.需求: 在浏览器输入一个URL,在URL后面加上参数就可以访问一个有提示值的报表?比如下面的报表 二.解决办法 Cognos  Model 查询主题设计层概要 Select * from [UCO ...

  9. .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类

    引言 由公司需要使用dapper  同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions  并配套 生成实体类小工具的方 ...

随机推荐

  1. PyQt5教程——对话框(6)

    PyQt5中的对话框 对话框窗口或对话框是大多数主流GUI应用不可缺少的部分.对话是两个或更多人之间的会话.在计算机应用中,对话框是一个用来和应用对话的窗口.对话框可以用来输入数据,修改数据,改变应用 ...

  2. Android OpenGL ES(四)----调整屏幕的宽高比

    1.宽高比问题 我们如今相当熟悉这样一个事实,在OpenGL里,我们要渲染的一切物体都要映射到X轴和Y轴上[-1,1]的范围内,对于Z轴也一样.这个范围内的坐标被称为归一化设备坐标,其独立于屏幕实际尺 ...

  3. 重置outlook 2010

    1.进入 D:\program files\mirosoft office\ioffice14 2.outlook /importprf .\.prf 3.账号问题可以-->控制面板--> ...

  4. 怎样让CodeBlocks支持C99

    转载请注明出处,否则将追究法律责任http://blog.csdn.net/xingjiarong/article/details/47080303 CodeBlocks是一个写C/C++的比較好的编 ...

  5. 新浪API及调用案例

    百度分享:http://pan.baidu.com/s/1uSmku

  6. 19、java内存分配 常量池详解

    在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如Stri ...

  7. jQuery 源码学习笔记

    //检测 window 中新增的对象 //first var oldMap = {}; for(var i in window) { oldMap[i] = 1; } //second for(var ...

  8. 开源APP 源码

    作者:wjh2005链接:http://www.zhihu.com/question/28518265/answer/88750562来源:知乎著作权归作者所有,转载请联系作者获得授权. 1. Cod ...

  9. 通过配置Apache实现404页面替换

    一.通用情况--修改apache配置.htaccess 一般网站报404原因都是找不到资源,是服务器(以Apache为例)报错,Apache自定义了404输出,我们的目的是使用自定义的404.html ...

  10. TP3.2中filed和find()使用

    1.总结:filed和find(),进行一维数组查询指定字段时,可以进行配合使用,获得结果:key:value; 但官方没有明确指出. 2.filed和getFiled最终的结果是不一样的,一个获得的 ...