利⽤Django中的url⽅法实现地址动态拼接⾃动⽣成超链接地址⽬标
建⽴⼀个图书列表页⾯,显⽰图书名列表,并实现点击书名跳转到图书详细页⾯,显⽰图书详细信息。
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⽂件中添加
# 导⼊路由,⽀持正则表达式
f.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):
# 导⼊图书类
dels 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):
# 导⼊图书类
dels import Book
# 实例化⼀个图书对象,使⽤book.id查询该书籍数据
book = (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>
实现效果
在浏览器中访问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. 能⼒有限,欢迎指错纠正。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。