建立一個圖書列表頁面,顯示圖書名列表,並實現點擊書名跳轉到圖書詳細頁面,顯示圖書詳細信息。
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 |
+----+--------------+-----------+
總結 |
以上工作的條件是你已經完成了Django的正常配置,並正常開啓了server;
數據庫中的數據是預先添加好的,這裏只是查詢數據庫中的數據。
注:本文轉自:https://www.cnblogs.com/waltsmith/p/8083247.html