創建一個圖書列表頁面,顯示圖書名列表,並實現點擊書名跳轉到圖書詳細頁面,顯示圖書詳細信息。html
- 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 |
+----+--------------+-----------+python
表polls_person
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | Joe | 12 |
| 2 | walt | 18 |
| 3 | walt | 17 |
| 4 | Jany | 20 |
| 5 | John | 29 |
+----+------+-----+正則表達式
- 先寫出圖書列表頁面
- 實現超連接自動拼接
- 編寫圖書詳情頁面
![這裏寫圖片描述](http://static.javashuo.com/static/loading.gif)
# 導入路由,支持正則表達式
from django.conf.urls import url
# 在路由匹配模式中添加圖書列表頁面的路由
urlpatterns = [
url(r'^booklist/$', polls_views.booklist),
# 定義拼接地址,獲取書籍信息
url(r'^bookinfo/(\d+)/$', polls_views.bookinfo, name='bookinfo')
]
# 圖書列表頁面控制器
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/
![這裏寫圖片描述](http://static.javashuo.com/static/loading.gif)
![這裏寫圖片描述](http://static.javashuo.com/static/loading.gif)
能夠看出,地址欄裏的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
- 以上工做的條件是你已經完成了Django的正常配置,並正常開啓了server;
- 數據庫中的數據是預先添加好的,這裏只是查詢數據庫中的數據。
- 能力有限,歡迎指錯糾正。