markdown [Django模板]#学习笔记#Web编程#Django
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown [Django模板]#学习笔记#Web编程#Django相关的知识,希望对你有一定的参考价值。
# [Django 模板]#学习笔记 #Web编程 #Django
## **学习笔记**
### Django Template
- 1.简单例子
index.html
> ```django
> <h1>{{ hello }}</h1>
> ```
views.py
> ```python
> from django.shortcuts import render,redirect,HttpResponse
> def hello(request):
> context={}
> context['hello'] = 'Hello World!'
> return render(request, 'hello.html', context)
> ```
urls.py
> ```python
> urlpatterns = [
> url(r'^admin/', admin.site.urls),
> url(r'^hello/', views.index),
> ]
> ```
- 2.模板语法~变量
views.py
> ```python
> def index(request):
> import datetime
> s="hello"
> l=[111,222,333] # 列表
> dic={"name":"yuan","age":18} # 字典
> date = datetime.date(1993, 5, 2) # 日期对象
>
> class Person(object):
> def __init__(self,name):
> self.name=name
>
> person_yuan=Person("yuan") # 自定义类对象
> person_egon=Person("egon")
> person_alex=Person("alex")
>
> person_list=[person_yuan,person_egon,person_alex]
>
>
> return render(request,"index.html",{"l":l,"dic":dic,"date":date,"person_list":person_list})
> ```
在 template 中的变量形式:
> ```django
> <h4>{{s}}</h4>
> <h4>列表:{{ l.0 }}</h4>
> <h4>列表:{{ l.2 }}</h4>
> <h4>字典:{{ dic.name }}</h4>
> <h4>日期:{{ date.year }}</h4>
> <h4>类对象列表:{{ person_list.0.name }}</h4>
> ```
- 3.模板之过滤器
语法:`{{obj|filter__name:param}}`
default:如果一个变量是 false 或者为空,使用给定的默认值。否则,使用变量的值。例如:`{{ value|default:"nothing" }}`
length:返回值的长度。它对字符串和列表都起作用。例如:`{{ value|length }}`
filesizeformat:将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:`{{ value|filesizeformat }}`
date:将值按照给定的方式格式化。`{{ value|date:"Y-m-d" }}`
safe:Django 的模板中会对 HTML 标签和 JS 等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些 HTML 元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于 FCKeditor 编辑加注了 HTML 修饰符的文本,如果自动转义的话显示的就是保护 HTML 标签的源文件。为了在 Django 中关闭 HTML 的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉 Django 这段代码是安全的不必转义。比如:
> ```django
> value="<a href="">点击</a>"
> {{ value|safe}}
>
> ```
- 4.模板之标签
for 标签:遍历每一个元素, 语法:
> ```django
> {% for person in person_list %}
> <p>{{ person.name }}</p>
> {% endfor %}
> ```
for...empty 标签:for 标签带有一个可选的`{% empty %}` 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
> ```django
> {% for person in person_list %}
> <p>{{ person.name }}</p>
>
> {% empty %}
> <p>sorry,no person here</p>
> {% endfor %}
> ```
if 标签:`{% if %}`会对一个变量求值,如果它的值是“True”(存在、不为空、且不是 boolean 类型的 false 值),对应的内容块会输出。
> ```django
> {% if num > 100 or num < 0 %}
> <p>无效</p>
> {% elif num > 80 and num < 100 %}
> <p>优秀</p>
> {% else %}
> <p>凑活吧</p>
> {% endif %}
> ```
with 标签:使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的
> ```django
> {% with total=business.employees.count %}
> {{ total }} employee{{ total|pluralize }}
> {% endwith %}
> ```
- 5.自定义标签和过滤器
1> 在 settings 中的 INSTALLED_APPS 配置当前 app,不然 django 无法找到自定义的 simple_tag.
2> 在 app 中创建 templatetags 模块(模块名只能是 templatetags)
3> 创建任意 .py 文件,如:my_tags.py
> ```python
> from django import template
> from django.utils.safestring import mark_safe
>
> register = template.Library() #register的名字是固定的,不可改变
> #以上内容是固定格式。
>
> @register.filter #定义一个过滤器
>
> def filter_multi(x,y): #实现一个简单的乘法函数 <br> return x * y<br><br>
>
> @register.simple_tag #定义一个标签
>
> def multi(x,y): <br> return x * y
>```
4> 在使用自定义 simple_tag 和 filter 的 html 文件中导入之前创建的 my_tags.py
`{% load my_tags %}`
5> 使用 simple_tag 和 filter(如何调用)
`num=10`
`{{ num|filter_multi:2 }}` #经过调用得:20
注意:filter 可以用在 if 等语句后,simple_tag 不可以。filter 只能接收两个参数。
- 6.模板继承
Django 模版引擎中最强大也是最复杂的部分就是模版继承,模板继承简单理解为通过继承的方法实现模板(base.html)复用。
简单的例子:以下文件 base.html 为模板文件,文件中 {% block mainbody %} {% endblock %} 内需要补充自己需要的内容,子模版可能会覆盖掉模版中的这些位置。
> ```django
> <!DOCTYPE html>
> <html>
> <head>
> <meta charset="utf-8">
> <title></title>
> </head> > <body>
> <h1>Hello World!</h1>
> {% block mainbody %} >
> {% endblock %} > </body>
> </html>
> ```
下面的文件为继承base.html
> ```django
> {% extends "base.html" %}
>
> {% block mainbody %}<p>继承了 base.html 文件</p>
> {% endblock %}
> ```
以上是关于markdown [Django模板]#学习笔记#Web编程#Django的主要内容,如果未能解决你的问题,请参考以下文章
markdown [Django常用命令]#学习笔记#Web编程#Django
markdown [Django前后台的数据传递]#学习笔记#Web编程#Django