1. 程式人生 > 實用技巧 >學習筆記專案2-Django-建立資料庫及應用

學習筆記專案2-Django-建立資料庫及應用

學習筆記專案

Django-建立其他網頁

該部分擴充了兩個顯示資料的新網頁。首先建立了一個父模板HTML,新的網頁都繼承這個父模板來顯示資料,其中一個
顯示所有特定主題,另一個顯示所有主題的條目

  1. 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 模式匹配。

  1. 子模板
    重新編寫 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 知道是繼承了那個父模板。在子模板中,只需包含當前網頁要
要增加的內容。

顯示所有主題的頁面

該部分顯示使用者建立的主題

  1. 首先,修改 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 不匹配。

  1. 請求的 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)
  1. 在 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在列表為空時該怎麼操作。

  1. 修改父模板,使其包含到顯示所有主題的頁面的連結
<p>
    <a href="{% url 'learning_logs:index' %}">Learning Log</a> -
    <a href="{% url 'learning_logs:topics' %}">Topics</a>
</p>

{% block content %}{% endblock content %}