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

markdown [Django与Ajax实现网页动态数据显示]#学习笔记#Web编程#Django

django学习笔记模板

Django 学习笔记模板变量

Django 学习笔记模板导入