Django Template层之Template概述

简介: Django Template层之Template概述

Django Template层之Template概述


实践环境

Python版本:python-3.4.0.amd64

下载地址:https://www.python.org/downloads/release/python-340/

 

 

Win7 64位

 

Django  1.11.4

下载地址:https://www.djangoproject.com/download/

 

 

模板引擎支持

配置

通过settings.py中的TEMPLATES 配置模板引擎。TEMPLATES配置为一个list列表,每个列表代表一个引擎,默认值为空list。以下为自动生成的配置:

TEMPLATES = [

   {

       'BACKEND': 'django.template.backends.django.DjangoTemplates',

       'DIRS': [],

       'APP_DIRS': True,

       'OPTIONS': {

           # ... some options here ...

       },

   },

]

 

说明:

BACKEND 点分python path,指定django模板backend api的模板引擎类。内置的backend引擎为django.template.backends.django.DjangoTemplates 和 django.template.backends.jinja2.jinja2

 

DIRS 定义引擎查找模板源文件的目录

APP_DIRS 告诉引擎是在已安装应用内部查找模板,每个backend在应用内部,按约定名称定义了用于存储模板一个目录。

 

OPTIONS 包含backend具体的配置

 

用法(Usage)

 

 

Built-in backends

 

Custom backends

 

Debug integration for custom engines

 

Django模板语言

变量(Variables)

变量输出来自context的值,context-类似字典的对象

变量采用{{ }} 包围,例子:

 

html模板

<!DOCTYPE html>

<html lang="zh-cn">

<head>

   {% load staticfiles %}

 

</head>

<body>

 

<div>

My first name is {{ first_name }}. My last name is {{ last_name }}.

</div>

 

 

</body>

</html>

 

 

视图

#-*- encoding:utf-8 -*-

 

__author__ = 'shouke'

 

from django.shortcuts import render

# Create your views here.

 

 

def test_page(request):

   return render(request, 'website/pages/mytest.html',{'first_name': 'John', 'last_name': 'Doe'})

 

 

渲染结果为

 

 

支持字典查找,对象属性查找,list索引查找:

{{ my_dict.key }}

{{ my_object.attribute }}

{{ my_list.0 }}

 

例子:上述render函数代码如果修改为以下

return render(request, 'website/pages/mytest.html',{'name':{'first_name': 'John', 'last_name': 'Doe'}})

 

则可在html模板中这样引用 {{ name.first_name }}

 

 

如果变量解析为一个可调用对象,那么模板系统将不带参数调用该可调用对象,并使用其返还结果。

 

标签(Tags)

标签用于在渲染过程中提供灵活的逻辑处理(arbitrary logic)

 

标签应该使用 {% %} 包围,形如

{% csrf_token %}

 

大部分标签都可以接收参数

{% cycle 'odd' 'even' %}

 

引用urls.py中的指定url

{% url app_name:url_name%}

 

一些tag要求有开始标签和结束标签

{% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}

 

 

一些例子:

1:根据用户是否登录展示不同的内容

{% if user.is_authenticated %}

<p>你已登录,欢迎你:<a href="#">{{ user.username }}</a></p>

{% else %}

<p>你还没有登录,请

   <button><a href="#">登录</a></button>

   或者

   <button><a href="#">注册</a></button>

</p>

{% endif %}

 

{% if athlete_list %}

   Number of athletes: {{ athlete_list|length }}

{% elif athlete_in_locker_room_list %}

   Athletes should be out of the locker room soon!

{% else %}

   No athletes.

{% endif %}

 

<ul>

{% for athlete in athlete_list %}

   <li>{{ athlete.name }}</li>

{% endfor %}

</ul>

 

 

2:基于名称空间和url命名,在html模板中引用urls.py中的指定url

app应用的urls.py配置如下

__author__ = 'shouke'

 

from django.conf.urls import url

 

from . import views

from . import register_views

from . import login_out_views

from . import change_pwd_views

 

app_name = 'website'

 

urlpatterns = [

……,

   url(r' ^platform/ pages/home.html$'', views.home, name='home_url'),

……,

]

 

 

<li class="active" id="defaultMenu"><a href="{% url 'website:home_url' %}">首页</a></li>

 

程序运行时,这里的

<a href="{% url 'website:home_url' %}

将被替换为

<a href="/platform/ pages/home.html"}

 

参考链接:https://docs.djangoproject.com/en/2.1/ref/templates/language/#tags

 

for循环遍历list

view视图

 

#-*- encoding:utf-8 -*-



__author__ = 'shouke'


from django.shortcuts import render

# Create your views here.

def test_page(request):

   return render(request, 'website/pages/mytest.html',{'result':['html', 'js', 'csss']})



 

html模板

<!DOCTYPE html>

<html lang="zh-cn">

<head>

   {% load staticfiles %}



</head>

<body>

{% for value in result %}

       <p>{{ value }}</p>

{% endfor %}





</body>

</html>

 

运行结果:

 

 

html模板中使用引用会话信息

 

{% for key,value in request.session.items %}

   {% ifequal 'username' key %}

       username is {{ value }}

   {% endifequal %}

{% endfor %}

 

 

过滤器(Filters)

 

注释(Comments)

单行注释

html模板中使用单行注释,形如以下:

 

{# this won't be rendered #}

 

多行注释

使用 comment tag实现多行注释

<body>

{% comment %}

<div>

My first name is {{ first_name }}. My last name is {{ last_name }}.

</div>

{% endcomment %}

</body>

 

>>> all_entries = Person.objects.all()

>>> all_entries

<QuerySet [<Person: Person object>]>

 

说明:

all()方法会返回数据库表中所有记录的结果集,等同于以下sql SELECT 语句

SELECT * FROM `myapp_person`

 

组件(Commponents)

 

参考链接:

https://docs.djangoproject.com/en/2.1/topics/templates

 

目录
相关文章
|
JSON 数据库 数据格式
[Python]Django 视图(View)和URL 与 模板(Template)
[Python]Django 视图(View)和URL 与 模板(Template)
|
前端开发 JavaScript 数据库
Django框架开发005期 Python调用template模板网页开发调用静态资源
Django框架开发005期 Python调用template模板网页开发调用静态资源
107 0
|
Python
Django框架开发004期 Python编程调用自定义Django框架template模板网页
Django框架开发004期 Python编程调用自定义Django框架template模板网页
127 0
|
测试技术 Python
Django Template层之自定义tag
Django Template层之自定义tag
64 0
|
JSON 前端开发 数据管理
Django template层之json报文遍历总结
Django template层之json报文遍历总结
121 0
|
Python 数据格式 JSON
Django template过滤器
转载:https://blog.csdn.net/zhouheng2018/article/details/70194805 一 模板的组成 HTML代码+逻辑控制代码 二 逻辑控制代码的组成 1 变量(使用双大括号来引用变量) {{ var_...
892 0
|
17天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
105 45
|
18天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
31 2