由startproject命令生成的settings.py定義關於模板的值:javascript
DIRS=[os.path.join(BASE_DIR,"templates")]
loader.get_template(template_name),返回一個Template對象
Template對象的render(RequestContext)方法,使用context渲染模板
from django.template import loader, RequestContext
from django.http import HttpResponse def index(request): tem = loader.get_template('ectest/index.html') context = RequestContext(request, {}) return HttpResponse(tem.render(context))
from django.shortcuts import render
def index(request): return render(request, 'ectest/index.html')
{{ variable }}
from django.db import models
class HeroInfo(models.Model): ... def showName(self): return self.hname
from django.shortcuts import render
from models import *
def index(request): hero = HeroInfo(hname='abc') context = {'hero': hero} return render(request, 'ectest/detail.html', context)
{{hero.showName}}
注意:不能傳遞參數css
{ %for ... in ...%}
循環邏輯
{{forloop.counter}}表示當前是第幾回循環
{ %empty%} 給出的列表爲空或列表不存在時,執行此處 { %endfor%}
{ %if ...%}
邏輯1
{ %elif ...%} 邏輯2 { %else%} 邏輯3 { %endif%}
{ %include "foo/bar.html" % }
{ % url 'name' p1 p2 %}
{ % csrf_token %}
# 能夠在if標籤中使用過濾器結合運算符
if list1|length > 1
# 過濾器可以被「串聯」,構成過濾器鏈
name|lower|upper
# 過濾器能夠傳遞參數,參數使用引號包起來
list|join:", "
# default:若是一個變量沒有被提供,或者值爲false或空,則使用默認值,不然使用變量的值
value|default:"什麼也沒有"
# date:根據給定格式對一個date變量格式化
value|date:'Y-m-d'
{#...#}
# comment標籤
{ % comment % }
多行註釋
{ % endcomment % }
查詢全部英雄信息顯示出來,要求奇數行顯示爲紅色,偶數行顯示爲藍色html
{ %block block_name%}
這裏能夠定義默認值
若是不定義默認值,則表示空字符串
{ %endblock%}
{ % extends "base.html" %}
{ %block block_name%}
實際填充內容
{ %endblock%}
{ % block block_name %}
區域內容
{ % endblock block_name %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %} 水果超市</title>
</head>
<body>
<h1>top--{{logo}}</h1>
<hr/>
{% block content %}{% endblock %} <hr/> bottom </body> </html>
{% extends 'ectest/base.html' %}
{% block title %}商品{% endblock title %} {% block content %} <table border="1"> <tr> <td height="300"> {% block left %}推薦商品{% endblock left %} </td> <td width="300" align="center"> {% block goods_content %} {% endblock %} </td> </tr> </table> {% endblock content%}
{% extends 'ectest/base.html'%}
{% block title %}用戶中心{% endblock %} {% block content %} <table border="1"> <tr> <td height="300"> {% block left %} 用戶導航{% endblock left %} </td> <td width="300" align="center"> {% block user_content %} {% endblock %} </td> </tr> </table> {% endblock content%}
{% extends 'ectest/base.html' %}
{% block content %} 首頁內容 {% endblock content%}
3.爲具體頁面建立模板,繼承自分支模板java
{%extends 'ectest/base_goods.html'%}
{%block goods_content%} 商品正文列表 {%endblock goods_content%}
{%extends 'ectest/base_user.html'%}
{%block user_content%} 用戶密碼修改 {%endblock user_content%}
4.視圖調用具體頁面,並傳遞模板中須要的數據jquery
logo='welcome to igeek'
def index(request):
return render(request, 'ectest/index.html', {'logo': logo})
def goodslist(request):
return render(request, 'ectest/goodslist.html', {'logo': logo})
def userpwd(request):
return render(request, 'ectest/userpwd.html', {'logo': logo})
from django.conf.urls import url
from . import views urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^list/$', views.goodslist, name='list'), url(r'^pwd/$', views.userpwd, name='pwd'), ]
視圖代碼: def index(request): return render(request, 'ectest/index2.html', { 't1': '<h1>hello</h1>' }) 模板代碼: {{t1}}
< 會轉換爲< > 會轉換爲> ' (單引號) 會轉換爲' " (雙引號)會轉換爲 " & 會轉換爲 &
{{t1|escape}}
{{ data|safe }}
{ % autoescape off %}
{{ body }}
{ % endautoescape %}
{ { data|default:"<b>123</b>" }} # 應寫爲: { { data|default:"<b>123</b>" }}
def csrf1(request): return render(request,'booktest/csrf1.html') def csrf2(request): uname=request.POST['uname'] return render(request,'booktest/csrf2.html',{'uname':uname})
url(r'^csrf1/$', views.csrf1), url(r'^csrf2/$', views.csrf2),
<html> <head> <title>Title</title> </head> <body> <form method="post" action="/crsf2/"> <input name="uname"><br> <input type="submit" value="提交"/> </form> </body> </html>
<html>
<head>
<title>Title</title>
</head>
<body>
{{ uname }}
</body>
</html>
<form> {% csrf_token %} ... </form>
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def csrf2(request): uname=request.POST['uname'] return render(request,'booktest/csrf2.html',{'uname':uname})
<input type='hidden' name='csrfmiddlewaretoken' value='nGjAB3Md9ZSb4NmG1sXDolPmh3bR2g59' />
# -*- coding: utf-8 -*- from django.http import HttpResponse, HttpResponseRedirect from PIL import Image, ImageFont, ImageDraw import random import cStringIO def verifycode(request): # 圖像的背景色 bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255) # 圖像寬 width = 100 # 圖像高 heigh = 25 # 建立圖像對象 img = Image.new('RGB', (width, heigh), bgcolor) # 建立能夠圖像對象繪圖的Draw對象 draw = ImageDraw.Draw(img) # 在圖像上隨機100個座標上繪製畫點 for i in range(0, 100): xy = (random.randrange(0, width), random.randrange(0, heigh)) fill = (random.randrange(0, 255), 255, random.randrange(0, 255)) draw.point(xy, fill=fill) # 定義驗證碼的備選值 str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0' # 在備選值中隨機選取4個值做爲驗證碼 random_str = '' for i in range(4): random_str += str1[random.randrange(len(str1))] # 構造字體對象 font = ImageFont.truetype('C:\Windows\Fonts\Arial.ttf', 23) # 構造字體顏色 fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255)) # 繪製4個值做爲驗證碼 for t in range(4): draw.text((25 * t + 5, 2), random_str[t], font=font, fill=fontcolor) # 釋放Draw對象 del draw # 將驗證碼存入session,用於作進一步驗證 request.session['verifycode'] = random_str # 將圖片對象以類型爲png保存到內存中 buf = cStringIO.StringIO() img.save(buf, 'png') # 將內存中的圖片數據返回給客戶端,MIME類型爲圖片png return HttpResponse(buf.getvalue(), 'image/png')
from django.conf.urls import url from . import views, viewsUtil urlpatterns = [ url(r'verifycode/$', viewsUtil.verifycode, name='verifycode'), ]
from django.shortcuts import render def index(request): return render(request, 'booktest/index1.html')
from django.conf.urls import url from . import views, viewsUtil urlpatterns = [ url(r'^index/$', viewsUtil.index, name='index1'), ]
<img id='verifycode' src="/verifycode/" alt="CheckCode">
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script type="text/javascript" src="/static/jquery-3.3.1.min.js"></script> <script type="text/javascript"> $(function () { $('#verifycodeChange').css('cursor', 'pointer').click(function () { $('#verifycode').attr('src', $('#verifycode').attr('src')+1) }); }); </script> <img id='verifycode' src="/verifycode/?" alt="CheckCode"> <span id="verifycodeChange">看不清,換一個</span>
<form method="post" action="/verifycodeValid/"> {% csrf_token %} <input type="text" name="vc"> <img id='verifycode' src="/verifycode/?" alt="CheckCode"> <span id="verifycodeChange">看不清,換一個</span> <br> <input type="submit" value="提交"> </form>
from django.http import HttpResponse, HttpResponseRedirect def verifycodeValid(request): vc = request.POST['vc'] if vc.upper() == request.session['verifycode']: return HttpResponse('登陸成功') else: return HttpResponseRedirect(reverse('booktest:index1'))
from django.conf.urls import url from . import views, viewsUtil urlpatterns = [ url(r'verifycodeValid/$', viewsUtil.verifycodeValid, name='verifycodeValid') ]