利用Django中的url方法實現地址動態拼接自動生成超鏈接地址
阿新 • • 發佈:2017-12-22
蝴蝶 控制 可選 編寫 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/
- 功能:返回一個絕對路徑的引用(不包含域名的URL);該引用匹配一個給定的視圖函數和
已有數據庫及信息 |
數據庫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;
- 數據庫中的數據是預先添加好的,這裏只是查詢數據庫中的數據。
- 能力有限,歡迎指錯糾正。
利用Django中的url方法實現地址動態拼接自動生成超鏈接地址