學習筆記專案2-Django-建立資料庫及應用
阿新 • • 發佈:2020-08-22
學習筆記專案
Django-建立其他網頁
該部分擴充了兩個顯示資料的新網頁。首先建立了一個父模板HTML,新的網頁都繼承這個父模板來顯示資料,其中一個
顯示所有特定主題,另一個顯示所有主題的條目
- base.html
<p>
<a href="{% url 'learning_logs:index' %}">Learning Log</a> -
</p>
{% block content %}{% endblock content %}
該模板是一個基礎模板,其他網頁的模板都繼承這個模板再去新增內容。
模板標籤 {% url 'learning_logs:index' %} 生成一個URL,該 URL 與 learning_logs:index 中定義的名為 index
的 URL 模式匹配。
- 子模板
重新編寫 index.html
{% extends "learning_logs/base.html" %}
{% block content %}
<p>Learning Log helps you keep track of yhour learning, for any topic you`re learning about</p>
{% endblock content %}
字模板第一行必須包含標籤 {% extends %} ,讓 Django 知道是繼承了那個父模板。在子模板中,只需包含當前網頁要
要增加的內容。
顯示所有主題的頁面
該部分顯示使用者建立的主題
- 首先,修改 learning_logs/urls.py,定義一個能顯示所有主題的 url
rlpatterns = [
url(r'^$', views.index, name='index'), # 讓python查詢開頭和末尾之間沒有任何東西的url
# 顯示所有的主題
url(r'^topics/$', views.topics, name='topics'),
]
Django 在請求 url 時,會去檢查與這樣一個url模式相匹配, topics/ ,該模式新增在基礎 url 後面,即
在 http://localhost:8000/ 後面跟著 topics/ ,topics/ 後面不能跟著其它東西,否則 url 不匹配。
- 請求的 url 與上面的模式相匹配後,得到的請求都交給 views.py 中的 topics() 進行處理
在 views.py 中定義 topics()
from .models import Topic
def topics(request):
"""顯示所有的主題"""
topics = Topic.objects.order_by('date_added') # 查詢資料庫時,請求提供 Topic 物件,按屬性 date_added 對資料進行排序
context = {'topics': topics} # context 是一個傳送給模板的上下文,通過 render() 進行傳遞
return render(request, 'learning_logs/topics.html', context)
- 在 index.html 同目錄下建立 topics.html 模板,該模板接受來自 render() 的傳遞的字典 context。
{% extends "learning_logs/base.html" %}
{% block content %}
<p>Topics</p>
<ul>
{% for topic in topics %}
<li>
<a href="{% url 'learning_logs:topic' topic_id %}">{{ topic }}</a>
</li>
{% empty %}
<li>No topics have been added yet.</li>
{% endfor %}
</ul>
{% endblock content %}
該模板中列印了使用者輸入的主題。 {% extends %} 表明繼承了哪個父模板。標籤<ul></ul>表示無序列表。
標籤<li></li>用來顯示專案列表項,即每個主題。 模板標籤{% empty %},告訴Django在列表為空時該怎麼操作。
- 修改父模板,使其包含到顯示所有主題的頁面的連結
<p>
<a href="{% url 'learning_logs:index' %}">Learning Log</a> -
<a href="{% url 'learning_logs:topics' %}">Topics</a>
</p>
{% block content %}{% endblock content %}