Django模版

leagueandlegends / 2024-06-11 / 原文

一、模板

视图函数只是返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带有样式的HTML代码,这可以让浏览器渲染出非常漂亮的页面,目前市面上有非常多的模板系统,其中最知名最好用的是DTL和Jinja2。DTL是Django Template Language三个单词的缩写,也就是Django自带的模板语言,当然也可以配置Django支持Jinja2等其他模板引擎,但是作为Django内置的模板语言,和Django可以达到无缝衔接而不会产生一些不兼容的情况。

DTL与普通HTML文件的区别

DTL模版是一种带有特殊语法的HTML文件,这个HTML文件可以被Django编译,可以传递参数进去,实现数据动态化。在编译完成后,生成一个普通的HTML文件,然后发送给客户端。

二、渲染模板

渲染模板有很多种方式,以下有两种常用的方式

1、render_to_string:找到模板,然后将模版编译后渲染成Python的字符串格式,然后在通过HttpResponse类包装成一个HttpResponse对象返回回去。

2、Django提供了一个更加简便的方式,直接将模板渲染成字符串和包装成HttpResponse对象,一步到位。

1、方式一:render_to_string

新建template_intro_demo项目,并在项目中加入front app,在templates中新建一个index.html

项目结构:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    body{
        background-color: pink;
    }
</style>
<body>
这个是从模板中渲染的字符串
</body>
</html>

template_intro_demo.urls.py

from django.urls import path
from front import views

urlpatterns = [
    path("", views.index, name="index"),
]

front.views.py

from django.template.loader import render_to_string
from django.http import HttpResponse

def index(request):
    html=render_to_string("index.html")
    return HttpResponse(html)

 运行结果如下:

2、方式二:render函数

更改front.views.py

from django.shortcuts import render

def index(request):
    return render(request, 'index.html')

运行结果: