页面静态化——Django中Template和Context模块的使用方法

发布时间 2023-11-29 20:52:17作者: wellplayed

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())