1. 程式人生 > >利用Django中的url方法實現地址動態拼接自動生成超鏈接地址

利用Django中的url方法實現地址動態拼接自動生成超鏈接地址

蝴蝶 控制 可選 編寫 alt .html url pytho 條件

目標

建立一個圖書列表頁面,顯示圖書名列表,並實現點擊書名跳轉到圖書詳細頁面,顯示圖書詳細信息。

  • 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方法實現地址動態拼接自動生成超鏈接地址