`
san_yun
  • 浏览: 2654981 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

django template探索

 
阅读更多

由于需要解决django template问题,研究了django template结构

 

 

一、django tempate 结构

django.tempate是django 模板的封装,主要由两部分构成:

  1. loader.py       总控入口
  2. loaders          django自定义的一系列Loader,如django.template.loaders.filesystem.Loader

loader.py一些重要的类或者方法

 

def render_to_string(template_name, dictionary=None, context_instance=None)          入口 ,被shortcuts调用

def get_template(template_name)       被render_to_string调用 ,调用find_template

def find_template(name,dirs=None)    通过settings.TEMPLATE_LOADERS 加载template,被get_template调用                                               

find_template_loader(loader)                通过className实例化loader,被 find_template调用,只要一个名叫load_template_source方法即可。

 

 

 

render_to_string()是template的入口:

 

def render_to_response(*args, **kwargs):
    """
    Returns a HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    """
    httpresponse_kwargs = {'mimetype': kwargs.pop('mimetype', None)}
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

def render_to_string(template_name, dictionary=None, context_instance=None):
    """
    Loads the given template_name and renders it with the given dictionary as
    context. The template_name may be a string to load a single template using
    get_template, or it may be a tuple to use select_template to find one of
    the templates in the list. Returns a string.
    """
    dictionary = dictionary or {}
    if isinstance(template_name, (list, tuple)):
        t = select_template(template_name)
    else:
        t = get_template(template_name)
    if not context_instance:
        return t.render(Context(dictionary))
    # Add the dictionary to the context stack, ensuring it gets removed again
    # to keep the context_instance in the same state it started in.
    context_instance.update(dictionary)
    try:
        return t.render(context_instance)
    finally:
        context_instance.pop()
 

 

 

 

二、 django Template 的性能

 

 

django的Template性能非常差,就这么一段code, django 的template能跑10ms(而且blog.cached_tags is None)

{% if blog.cached_tags %}
        {% if blog.is_buyable %}
            {% for tag in blog.cached_tags %}
            <a href="/blogs/item/{{ tag.name|urlencode }}/">
                {{ tag.name }}
                {% if user == sender or user.is_staff %}
                    <u title="删除标签">&nbsp;</u>
                {% endif %}
            </a>
            {% endfor %}
        {% else %}
            {% for tag in blog.cached_tags %}
            <a href="/blogs/tag/{{ tag.name|urlencode }}/">
                {{ tag.name }}
                {% if user == sender or user.is_staff %}
                    <u title="删除标签">&nbsp;</u>
                {% endif %}
            </a>
            {% endfor %}
        {% endif %}
{% else %}
	{% if request.user != blog.sender and not request.user.is_staff %}
	   <b>还没有标签</b>
	{% endif %}
{% endif %}
 

 


 

网上有一份python 各template的测试结果:

funcname: render_django used 0.071762
funcname: render_webpy used 0.015729
funcname: render_bottle used 0.008752
funcname: render_tornado used 0.005675
funcname: render_jinja2 used 0.002073
funcname: render_mako used 0.001627
funcname: render_cheetah used 0.000014

    点评一下吧。django就是个渣,不多废话了。webpy的代码很简洁,可惜速度太慢了。bottle看起来快一点,不过也没有多出彩。tornado 本身速度很快,不过模板——也就是如此吧。真的值得一用的,只有jinja2,mako,cheetah三个。速度都小于了5ms,单核每秒可以生成 200个页面,16核机器上大概就能跑到3000req/s,性能比较高。jinja2的速度比较折衷,配置灵活,语法类似django是他的优点。而且 不得不说,jinja2的文档真的很不错。mako的速度比jinja2略快,模板写起来也很舒服。文档略凌乱,可以接受。cheetah的速度——已经 不像是模板了好吧。
  

 

 

  • 大小: 53.8 KB
分享到:
评论

相关推荐

    django3-Template.zip

    **Django 3 模板系统详解** Django是一个用Python编写的高级Web框架,它遵循“DRY(Don't Repeat Yourself)”原则,旨在简化Web应用的开发过程。...在实践中不断探索,将有助于你快速成长为一名熟练的Django开发者。

    PyPI 官网下载 | django-template-engines-1.2.29.tar.gz

    《深入理解Python库:Django Template Engines 1.2.29》 在Python的世界里,Django框架以其高效、灵活和强大的特性深受开发者喜爱。其中,Django的模板引擎是其核心组件之一,用于处理HTML和其他静态内容的动态部分...

    Django企业开发实战.源码

    5. **模板系统**:探索HTML模板文件,学习如何利用Django模板语言(Django Template Language, DTL)进行动态内容渲染。 6. **表单处理**:理解如何定义表单类,使用`forms.py`,以及如何在视图中处理用户提交的...

    Django课件与代码

    Django是用Python编写的,遵循MVT(Model-View-Template)架构模式。这意味着在开发过程中,你可以清晰地分离业务逻辑、数据模型和用户界面。在这个课件中,你将学习到如何创建一个Django项目和应用,以及如何定义...

    django python3 实例下载

    **Django Python3 实例与MySQL数据库的整合** 在Python Web开发领域,Django是一个非常...通过阅读`运行前必看.txt`,运行并调试`django.sql`中的SQL,以及探索`mysite`目录,你可以逐步掌握Django与MySQL的配合使用。

    最简单的Python Django入门教程.pdf

    【Python Django入门教程】 Django是一个基于Python的开源Web应用框架,遵循MVC(模型-视图-控制器)设计模式,但在Django...通过学习本教程,你将能够掌握Django的基本概念和流程,进一步深入探索这个强大的Web框架。

    django入门与实践.zip

    《Django入门与实践》这份资源是一份针对初学者的Python Web开发教程,重点介绍了Django框架的基础知识和实际应用技巧。Django是Python编程语言中...在实践中不断探索,你将发现Django是一个强大而灵活的Web开发工具。

    2019版-千锋Django-源码+笔记.zip

    《深入探索Django框架:2019版千锋Django源码与笔记解析》 Django,作为Python世界中最受欢迎的Web开发框架之一,以其高效、简洁和强大的功能著称。2019版千锋Django的源码与笔记资源,为初学者和进阶者提供了一个...

    Django小项目超简单贼适合新手

    **Django小项目超简单贼适合新手** 在Python Web开发领域,...在学习过程中,不断探索Django的高级特性,如用户认证、表单处理、中间件、自定义管理命令等,会让你的技能更加全面。祝你在Django的世界里学习愉快!

    Django基础.rar

    **Django基础** Django是Python编程语言中的一款强大、高效且流行的Web开发框架,它遵循模型-视图-...继续探索Django的高级特性,如中间件、缓存、认证和权限控制,以及更多功能,你将成为一名熟练的Django开发者。

    精通Django

    它的主要特点是模型-视图-控制器(MVC)架构模式的实现,即Model、View和Template,以及管理后台(Admin)。Django提供了丰富的内置功能,如ORM(对象关系映射)、数据库迁移工具、身份验证和授权系统、URL路由、...

    django课件基础篇

    Django是Python编程语言中的一个强大且流行的Web框架,它为开发者提供了构建高效、安全、可扩展的...在学习过程中,不断实践和探索,你会发现Django是一个强大且富有表现力的工具,能够助你轻松构建复杂的Web应用程序。

    Django说明及示例

    **Django** 是一个用 Python 编写的高级 Web 框架,它遵循模型-视图-模板(Model-View-Template,MVT)的设计模式。Django 的设计目标是简化 Web 开发流程,并通过内置的功能模块来提高开发效率和应用程序的安全性。...

    djangoWeb.rar

    《Python Django实战详解》 在IT领域,Python Django框架是一个非常流行且...在这个过程中,不断探索和实践是提升技能的关键。无论你是Python新手还是有经验的开发者,Django都会为你提供一个高效、强大的开发环境。

    深入探索Django:从基础到实战应用

    Django遵循MVC设计模式,即模型(Model)、视图(View)、模板(Template),并提供了一个由许多可重用组件构成的系统,以帮助开发者构建高质量的Web应用。本文将详细介绍如何在Python中使用Django框架,包括环境...

    Python+Django+vue3全栈开发商城项目.zip

    在这个"Python+Django+vue3全栈开发商城项目.zip"中,我们探索的是一个结合了Python、Django框架和Vue.js(特别是Vue3版本)技术的电子商务平台的开发实践。这个项目旨在提供一个全面的解决方案,涵盖了从后端数据...

    Django docs-1.11-en

    ### Django 1.11 文档概述与关键知识点解析 #### 一、文档概览 ...以上是对 Django 1.11 文档中的关键知识点的梳理和总结, 旨在为初学者提供一个全面的学习指南, 同时也为有经验的开发者提供了深入探索的技术细节。

    Django_pt_1_pythondjango_

    最后,探索Django的高级特性,如中间件、自定义管理命令、单元测试和性能优化。 通过阅读“Django Pt. 1.pdf”,你将了解Django的基本架构,开始搭建第一个Django项目,并掌握如何使用Django进行数据库操作和视图的...

    Django Web开发指南-源代码(python3.4+django1.7.1)

    《Django Web开发指南》是一本深入讲解使用Python的Django框架进行Web应用构建的教程。源代码基于Python 3.4.2和...通过探索和运行这些示例,你可以掌握Django框架的核心概念,并逐步成为一名熟练的Django开发者。

    Django源码包

    2. **模板引擎的工作原理**:查看`django.template`模块,理解模板继承、过滤器和标签的实现。 3. **数据库查询**:探索`QuerySet` API,理解其延迟加载和缓存机制,以及如何优化SQL查询。 4. **中间件的实现**:...

Global site tag (gtag.js) - Google Analytics