Django---模板使用
阿新 • • 發佈:2018-01-28
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 .importviews 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---模板使用