1. 程式人生 > 實用技巧 >Django基礎5--主頁及模板

Django基礎5--主頁及模板

1. 建立主頁
  • 使用Django建立網頁的過程通常分三個階段:定義URL、編寫檢視和編寫模板
  • 每個URL都被對映到特定的檢視,檢視函式獲取並處理網頁所需的資料
2.編寫更多檢視
  • 現在在views.py 裡新增更多檢視
from django.http import HttpResponse

# Create your views here.


def home(request):
    return HttpResponse("Hello, Welcome to Home Page")


def project_list(request):
    return HttpResponse('You\'re looking at the list of project list')


def register(request):
    return HttpResponse('You\'re looking at the register page')


  • 把這些新檢視新增進 urls 模組裡
# 作者:伊洛Yiluo 公眾號:伊洛的小屋
# 個人主頁:https://yiluotalk.com/
# 部落格園:https://www.cnblogs.com/yiluotalk/
from django.urls import path
from . import views


urlpatterns = [
    path('home/', views.home, name='index'),
    path('project_list/', views.project_list, name='project list'),
    path('register/', views.register, name='register'),
]
  • 分別輸入網址檢視結果

3. 寫一個真正有用的檢視
  • 每個檢視必須要做的只有兩件事:返回一個包含被請求頁面內容的 [HttpResponse]物件,或者丟擲一個異常,比如 [Http404]
  • 回到views.py
  • 之前我們在管理後臺新增過project的資料
  • 來修改一下主頁的程式碼
from django.http import HttpResponse
from .models import ProjectInfo

# Create your views here.


def home(request):
    project_list = ProjectInfo.objects.order_by('add_data')[:5]
    output = ', '.join([q.project_name for q in project_list])
    return HttpResponse(output)


def project_list(request):
    return HttpResponse('You\'re looking at the list of project list')


def register(request):
    return HttpResponse('You\'re looking at the register page')
  • 開啟網頁檢視

    內容已經成功的展示
4.模板
  • 雖然上面實現了暫時頁面,但是存在一個比較嚴重的問題。內容是寫在程式碼裡面的,這樣不適合管理。下面建立一個檢視,就可以將頁面的設計從程式碼中分離出來
  • 首先來建立一個templates 目錄,用來存放靜態檔案,再建立一個目錄 autoapi,然後在其中新建一個檔案home.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AutoPlarform Home</title>
</head>
<body>
{% if project_list %}
    <ul>
    {% for project in project_list %}
        <li>
        <a href="/autoapi/register/">{{ project.project_name }}</a>
        </li>
    {% endfor %}
    </ul>
{% endif %}

</body>
</html>
  • 下面在更新下views.py
from django.http import HttpResponse
from django.template import loader

from .models import ProjectInfo

# Create your views here.


def home(request):
    project_list = ProjectInfo.objects.order_by('add_data')[:5]
    template = loader.get_template('autoapi/home.html')
    context = {
        'project_list': project_list,
    }
    return HttpResponse(template.render(context, request))


def project_list(request):
    return HttpResponse('You\'re looking at the list of project list')


def register(request):
    return HttpResponse('You\'re looking at the register page')
  • 我們來開啟主頁檢視下有沒有效果
  • 資訊成功的顯示在了主頁上
5.一個快捷函式: render()
  • Django 提供了一個快捷函式,我們用它來重寫views.py
from django.http import HttpResponse
from django.shortcuts import render

from .models import ProjectInfo

# Create your views here.


def home(request):
    project_list = ProjectInfo.objects.order_by('add_data')[:5]
    context = {'project_list': project_list}
    return render(request, 'autoapi/home.html', context)


def project_list(request):
    return HttpResponse('You\'re looking at the list of project list')


def register(request):
    return HttpResponse('You\'re looking at the register page')

  • 再次重新整理主頁檢視一下效果
  • 同剛才是一個效果