利用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 |
+----+------+-----+

思路
  • 先寫出圖書列表頁面

  • 實現超鏈接自動拼接

  • 編寫圖書詳情頁面

實現

項目目錄信息

圖片.png

  • 建立頁面路由
    在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. 數據庫中的數據是預先添加好的,這裏只是查詢數據庫中的數據。

注:本文轉自:https://www.cnblogs.com/waltsmith/p/8083247.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章