页面静态化——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)

浙公网安备 33010602011771号