页面静态化——Django中Template和Context模块的使用方法
1.Template和Context的导入
from django.template import Template, Context
2.生成静态页面
——在后端调用模板语法生成HTML页面,并保存到指定路径
2.1 我们想生成一个前端页面,代码如下
后端视图层传入的对象:
user_data = models.Userdata.objects.all()
<html> <body> {% for user in user_data %} <p>{{ user.user_agent }}</p> {% endfor %} </body> </html>
——在前端展示了数据库中所有的user_agent
数据
2.2 使用导入的两个模块在后端渲染前端页面
# 生成query_set对象 user_data = models.Userdata.objects.all() # Template的作用: # 创建模板字符串 加载模板 t = Template(''' <html> <body> {% for user in user_data %} <p>{{ user.user_agent }}</p> {% endfor %} </body> </html>''') # Context的作用: # 渲染模板字符串 创建上下文 ——将前端模板语法需要用到的 user_data 以字典的方式书写 c = Context({'user_data': user_data}) # 渲染模板并保存到文件 路径由自己指定 os.path.join html = t.render(c) with open(path, 'w') as f: f.write(html)
3.完整用法
——首次访问没有文件,调用模板语法创建静态文件并保存。之后访问便可以直接访问静态文件
from django.template import Template, Context def static_page(request): path = os.path.join('templates', 'static_page.html') if os.path.exists(path): return render(request, 'static_page.html', locals()) else: user_data = models.Userdata.objects.all() t = Template(''' <html> <body> {% for user in user_data %} <p>{{ user.user_agent }}</p> {% endfor %} </body> </html>''') c = Context({'user_data': user_data}) html = t.render(c) with open(path, 'w') as f: f.write(html) return render(request, 'static_page.html', locals())
另一种使用方式
from .models import Book from django.conf import settings from django.template import Template, Context def books_view(request): # 做静态化 if os.path.exists(os.path.join(settings.BASE_DIR, 'cache', 'books.html')): print('不走数据库') with open('cache/books.html', 'rt', encoding='utf-8') as f: res_str = f.read() return HttpResponse(res_str) else: books = Book.objects.all() with open('templates/books.html', 'rt', encoding='utf-8') as f: res = f.read() t = Template(res) c = Context({'books': books}) html = t.render(c) # 保存起来 with open('cache/books.html', 'wt', encoding='utf-8') as f: f.write(html) return HttpResponse(html)