Python 項目實踐三(Web應用程序) 第三篇


接着上節的繼續學習,現在要顯示所有主題的頁面

有了高效的網頁創建方法,就能專注於另外兩個網頁了:顯示全部主題的網頁以及顯示特定主題中條目的網頁。所有主題頁面顯示用戶創建的所有主題,它是第一個需要使用數據的網頁。

一 顯示所有主題的頁面

1 URL模式

#定義learning_logs的URL模式

from django.conf.urls import url

from . import views

app_name='learning_logs'
urlpatterns=[
    #主頁
    url(r'^$',views.index,name='index'),
    #顯示所有主題,
    url(r'^topics/$',views.topics,name='topics')
    ]

2 視圖

函數topics()需要從數據庫中獲取一些數據,並將其發送給模板。我們需要在views.py中添加的代碼如下:

from django.shortcuts import render
from .models import Topic

# Create your views here.
def index(request):
    '''學習筆記的主頁'''
    return render(request,'learning_logs/index.html')

def topics(request):
    topics = Topic.objects.order_by('date_added')
    context = {'topics': topics}
    return render(request, 'learning_logs/topics.html', context)

3 模板

顯示所有主題的頁面的模板接受字典context,以便能夠使用topics()提供的數據。請創建一個文件,將其命名為topics.html,並存儲到index.html所在的目錄中。下面演示了如何在這個模板中顯示主題:

{% extends "learning_logs/base.html" %}
{% block content %}
<p>Topics</p>
<ul>
  {% for topic in topics %}
    <li>{{ topic }}</li>
  {% empty %}
    <li>No topics have been added yet.</li>
 {% endfor %}
</ul>
{% endblock content %}

打開這個link:http://127.0.0.1:8000/topics/

二 顯示特定主題的頁面

接下來,我們需要創建一個專注於特定主題的頁面——顯示該主題的名稱及該主題的所有條目。同樣,我們將定義一個新的URL模式,編寫一個視圖並創建一個模板。我們還將修改顯示所有主題的網頁,讓每個項目列表項都是一個鏈接,單擊它將顯示相應主題的所有條目。

1 URL模式

顯示特定主題的頁面的URL模式與前面的所有URL模式都稍有不同,因為它將使用主題的id屬性來指出請求的是哪個主題。例如,如果用戶要查看主題Chess(其id為1)的詳細頁面,URL將為http://localhost:8000/topics/1/。下面是與這個URL匹配的模式,它包含在learning_logs/urls.py中:

#定義learning_logs的URL模式

from django.conf.urls import url

from . import views

app_name='learning_logs'
urlpatterns=[
    #主頁
    url(r'^$',views.index,name='index'),
    #顯示所有主題,
    url(r'^topics/$',views.topics,name='topics'),
    #特定主題的詳細頁面
    url(r'^topics/(?P<topic_id>\d+)',views.topics,name='topic')
    ]

發現URL與這個模式匹配時,Django將調用視圖函數topic(),並將存儲在topic_id中的值作為實參傳遞給它。在這個函數中,我們將使用topic_id的值來獲取相應的主題。

2 視圖

函數topic()需要從數據庫中獲取指定的主題以及與之相關聯的所有條目,如下所示:

def topic(request,topic_id):
	'''顯示單個主題以及所有的條目'''
	topic=Topic.objects.get(id=topic_id)
	entries=topic.entry_set.order_by('-date_added')
	context = {'topic':topic,'entries':entries}
	return render(request, 'learning_logs/topic.html', context)

3 模板

這個模板需要顯示主題的名稱和條目的內容;如果當前主題不包含任何條目,我們還需向用戶指出這一點:

{% extends "learning_logs/base.html" %}
{% block content %}

<p>Topic: {{ topic }}</p>
<p>Entries:</p>
<ul>
{% for entry in entries %}
  <li>
    <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
    <p>{{ entry.text|linebreaks }}</p>
  </li>
{% empty %}
  <li>
  There are no entries for this topic yet.
  </li>
{% endfor %}
</ul>

{% endblock content %}

結果如下圖:

三 總結

在本章中,我們首先學習了如何使用Django框架來創建Web應用程序。制定了簡要的項目規范,在虛擬環境中安裝了Django,創建了一個項目,並核實該項目已正確地創建。學習了如何創建應用程序,以及如何定義表示應用程序數據的模型。學習了數據庫,以及在修改模型后,Django可為遷移數據庫提供什么樣的幫助。學習了如何創建可訪問管理網站的超級用戶,並使用管理網站輸入了一些初始數據。還探索了Django shell,它讓能夠在終端會話中處理項目的數據。學習了如何定義URL、創建視圖函數以及編寫為網站創建網頁的模板。最后,使用了模板繼承,它可簡化各個模板的結構,並使得修改網站更容易。

四 展望

在接下來的學習中,我們將創建對用戶友好而直觀的網頁,讓用戶無需通過管理網站就能添加新的主題和條目,以及編輯既有的條目。我們還將添加一個用戶注冊系統,讓用戶能夠創建賬戶和自己的學習筆記。讓任意數量的用戶都能與之交互,是Web應用程序的核心所在。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM