1. 程式人生 > >Django---模板使用

Django---模板使用

creat doesn href 取數據 當前頁 mage obj content 參數

一、上節我們創建了Django -- 開始創建應用,這節我們接著上節的內容創建Django模板的使用,urls分路由的設置。

1.首先想想,我們通過什麽取到每一篇文章呢?

我們創建Djangoapp之後我們發現多了一個id 字段,這是主鍵,唯一的標識。

技術分享圖片

2.在 我們創建的articile目錄views下首先寫入一個方法:

使用Artcirle.objects.get() 方法獲取數據
from django.shortcuts import response
from django.http import HttpResponse,Http404
from .models import Artcirle #
導入方法 def Arcite_deaile(request,article_id): try: article = Artcirle.objects.get(pk = article_id)#關聯數據替換 article = raise Http404(not_exit)

在url裏面設置:

這裏的 <int:article_id> 與前面的pk主鍵關聯。
from django.contrib import admin
from django.urls import include,path
from .import
views urlpatterns = [ path(admin/, admin.site.urls), path(‘‘,views.index),#參數,方法 path(article/<int:article_id>,views.Arcite_deaile,name=Arcite_deaile), ]

3.我們可能會訪問到不存在的界面,這裏就需要使用Http404,方法,返回一個錯誤提示:

方法一:

try:
    article = Artcirle.objects.get(pk = article_id)
except Artcirle.DoesNotExist:
    
raise Http404(沒有!)

方法二:

還有一個get方法:get_object_or_404 這種方法代碼更加簡潔

article = get_object_or_404(Artcirle,pk = article_id)

4.讓數據顯示在模板上

需要先在app應用下建立一個templates文件夾,建立html模板

方法一:模板我們主要使用render方法傳數據給前端render(模板名( request,設立的數據庫class Artcirle(models.Model)名,還需建立一個字典名contenx)

方法二:是簡化版使用render_to_response只需後兩個變量就可以了

from django.shortcuts import render_to_response,get_object_or_404
from django.http import HttpResponse
from .models import Artcirle #導入方法
# Create your views here.
def Arcite_deaile(request,article_id):
    # try:
    article = get_object_or_404(Artcirle,pk = article_id)#模型+條件 url (article_id)和pk對應
    # article = Artcirle.objects.get(pk = article_id)#關聯數據替換
    # article = raise Http404(not_exit)
    contenx = {}
    contenx[article_obj] = article
    return render_to_response(deail.html,contenx)
    # # except Artcirle.DoesNotExist:
    # #     raise Http404(‘沒有!‘)

在html中使用{{}}來獲得數據

<html>
<header>
</header>
<body>
    <h2>{{article_obj.title}}</h2>
    <hr>
    <p>{{article_obj.content}}</p>
</body>
</html>
<!-- "<h2>標題%s</h2></br>內容%s"%(article.title,article.content) -->

5.獲取列表項

使用Artcirle.objects.all()方法獲取所有的數據之後再在templates之中設立html.list

# #獲取文章列表
def Arcite_list(request):
    articles = Artcirle.objects.all()#獲取所有的數據
    #創建字典傳值
    contenx = {}
    contenx[article_list] = articles #這裏的article_list是傳給模板顯示的值
    return render_to_response(list.html,contenx)

同樣的設置一個方法之後設置路由:

path(articile/,Arcite_list,name = Arcite_list),

6.最後實現一個點擊列表項跳轉到詳情的效果:

views代碼:

from django.shortcuts import render_to_response,get_object_or_404
from django.http import HttpResponse
from .models import Artcirle #導入方法
# Create your views here.
def Arcite_deaile(request,article_id):
    # try:
    article = get_object_or_404(Artcirle,pk = article_id)#模型+條件 url (article_id)和pk對應
    # article = Artcirle.objects.get(pk = article_id)#關聯數據替換
    # article = raise Http404(not_exit)
    contenx = {}
    contenx[article_obj] = article
    return render_to_response(deail.html,contenx)
    # # except Artcirle.DoesNotExist:
    # #     raise Http404(‘沒有!‘)
    
# #獲取文章列表
def Arcite_list(request):
    articles = Artcirle.objects.all()#獲取所有的數據
    #創建字典傳值
    contenx = {}
    contenx[article_list] = articles #這裏的article_list是傳給模板顯示的值
    return render_to_response(list.html,contenx)

html部分代碼:(deail.html)詳情頁

<html>
<header>
</header>
<body>
    <h2>{{article_obj.title}}</h2>
    <hr>
    <p>{{article_obj.content}}</p>
</body>
</html>
<!-- "<h2>標題%s</h2></br>內容%s"%(article.title,article.content) -->

(list.html)列表頁

<html>
<header>
</header>
<body>
    {%comment%}<!-- {% for article in article_list%}以循環的方式將列表讀取出來 --> 
    <!-- {{article_list}} 以字典裏的東西返回 --> 
    <!--  -->
    {%endcomment%}
    {% for article in article_list %}
    {%comment%}##寫法一:<a href = "/article/{{article.pk}}">{{article.title}}</a>
    這裏的article.pk是當前頁({% for article in article_list %})循環的那個article 
    {%endcomment%}
    {#寫法二:使用url規定的別名#}
    <a href = "{%url ‘Arcite_deaile‘ article.pk %}">{{article.title}}</a>

    {% endfor %}
</body>
</html>

Django---模板使用