学习笔记,仅供参考
参考自:Django打造大型企业官网;
本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的记录一下。
在之前的Blog中,视图函数会直接返回文本,但是在实际场景中很少这样用,因为实际的页面大多是带有样式的HTML代码,这可以让浏览器渲染出漂亮的页面。目前市面上有非常多的模板系统,其中最知名最好用的就是DTL和Jinja2。DTL是Django Template Language三个单词的缩写,也就是Django自带的模板语言。当然也可以配置Django支持Jinja2等其他模板引擎,但是作为Django内置的模板语言,和Django可以达到无缝衔接而不会产生一些不兼容的情况。
DTL模板是一种带有特殊语法的HTML文件,这个HTML文件可以被Django编译,可以传递参数进去,实现数据动态化。在编译完成后,生成一个普通的HTML文件,然后发送给客户端。
渲染模板有多种方式。这里讲下两种常用的方式:
第一种方式利用render_to_string函数找到模板,并将模板编译后渲染成Python的字符串格式,最后再通过HttpResponse类包装成一个HttpResponse对象给浏览器,例如:
from django.template.loader import render_to_string from django.http import HttpResponse def book_detail(request,book_id): html = render_to_string("detail.html") return HttpResponse(html) 第二种方式以上方式虽然已经很方便了。但是django还提供了一个更加简便的方式,直接将模板渲染成字符串和包装成HttpResponse对象一步到位完成,例如:
from django.shortcuts import render def book_list(request): return render(request,'list.html')这种方法的底层依然是先用render_to_string函数,将模板编译成Python的字符串格式,然后再通过HttpResponse类包装成一个HttpResponse对象,最后将HttpResponse对象返回,源码为:
def render(request, template_name, context=None, content_type=None, status=None, using=None): content = loader.render_to_string(template_name, context, request, using=using) return HttpResponse(content, content_type, status)