模板_模板文件的使用
from django.template import loader,RequestContext
from django.http import HttpResponse
#/index
def index(request):
#1.加载模板文件,获取一个模板对象
temp=Loader.get_template('booktest/index.html')
#2.定义模板上下文,给模板文件传数据
context = RequestContext(request,{})
#3.模板渲染,产生一个替换后的html内容
res_html=temp.render(context)
#4.返回应答
return HttpResponse(res_html)
url的配置
主配置文件:
urlpatterns=[
url(r'^',include('booktest.url')),
url(r'^'admin/,include('admin.site.urls')),
]
本应用的配置文件:
from django.conf.urls import url
from booktest import views
urlpattern=[
url(r'^index$',view.index)
]
因为每一个view都得生成一个模板对象,所以对此进行封装操作
def render(request,template_path,context={}):
#1.加载模板文件,获取一个模板对象
temp=Loader.get_template(template_path)
#2.定义模板上下文,给模板文件传数据
context = RequestContext(request,context)
#3.模板渲染,产生一个替换后的html内容
res_html=temp.render(context)
#4.返回应答
return HttpResponse(res_html)
#/index
def index(request):
return render(request,'booktest/index.html')
模板文件的加载顺序
1)首先去配置的模板目录下面去找模板文件
2)去INSTALL_APPS下面的每个应用中找模板文件,前提是每个应用中具有template文件夹
#/index2
def index2(request):
return render(request,'booktest/index2.html')
from django.conf.urls import url
from booktest import views
urlpattern=[
url(r'^index2$',view.index)
]
报错信息:
模板变量
过滤器:
<li class="red">{{book.title}}---{{book.bpubdate|date:'Y年-m月-d日'}}</li>
模板注释
<li class="red">{{book.title|length}}---{{book.bpubdate|date:'Y年-m月-d日'}}</li>
设置默认值
{{content |default:'hello'}}
模板转义
def html_escapse(request):
return render(request,'booktest/html_escapse.html','{'content':'<h1>hello</h1>'}')
关闭模板文件内的转义
{{content|safe}}</br>
{% autoescapse on%}
{%endautoescapse%}
{% autoescapse off%}
{%endautoescapse%}
#定义装饰器
def login_required(view_func):
'''登录装饰器'''
def wrapper(request,*view_args,**view_kwargs):
#判断用户是否登录
if request.session_has_key('islogin'):
#用户已登录,调用对应的视图
return view_fun(request,*view_args,**view_kwrags)
#用户未登录,跳转到登录页面
else:
return redirect('/login')
return wrapper
@login_required
def change_pwd(request):
return render(request,'booktest/change_pwd.html')
静态文件
{% load staticfiles %}
<img src={% static 'images/mm.jpg' %} />
中间件
def index(request):
#获取用户ip
user_ip = request.META(’REMOTE_ADDR‘)
middleware.py
from django.http import HttpResponse
class BlockedIPSMiddleware(object):
''中间件'
EXLUDE_IPS = ['']
def process_view(self,request,view_args,**view_kwargs):
'''视图函数调用h之前会调用'''
user_ip=request.META['REMOTE_ADDR']
if user_ip in BlockedIPSMiddleware.EXLLUDE_IPS:
return HttpResponse('booktest/index.html')
配置文件中的书写
中间件流程
class TestMiddleware(object):
def ————init__(self):
'''服务器重启之后,接受第一个请求时调用'''
print('____intit___')
def process_request(self,request):
'''产生request对象之后,url匹配之前调用'''
print('----proces_request----')
def process_view(self,request,view_func,*view_args):
'''url匹配之后,视图函数调用之前调用'''
print('-----process_view----')
def process_response(self,request,response):
'''视图函数调用之后,内容返回之前'''
print(’----process_response---‘)
return response
调用过程
class ExceptionTest1Middleware(object):
def process_Exception(self,request,exception):
'''异常函数发生时开始调用'''
print('-----process_Exception')
class ExceptionTest2Middleware(object)
def process_Exception(self,request,exception):
print('------process_Exception---')