Django基础篇--模板和路由分发

Posted thomson-fred

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django基础篇--模板和路由分发相关的知识,希望对你有一定的参考价值。

Django模板

首先什么是一个模板?

简单来说就是一个网页,可以被view响应给用户

目的是为了解决复杂的显示问题

 

2. 模板的设置问题

setting.py中的TEMPLATES配置

  1)BACKEND: 指定模板的搜索引擎,不用改动

  2)DIRS: 指定模板存放的目录

     DIRS=[‘ index.temp’ ,’music.temp’]

     但是,如果DIRS中为空的话,那么django会自动搜索每个应用中的templates的文件夹作为模板的管理目录

     推荐:DIRS保持空,但必须在每个应用中,创建一个templates的文件夹

   3)APP_DIRS

     True : 首先从DIRS中指定的文件夹中查找模板,如果没有找到指定模板的话,则再搜索templates目录

 

3. 模板的加载方式

  HttpResponse() 这是加载字符串的

 1. 使用loader 获取模板,通过HttpResponse进行响应

   最终返回模板前都是把模板转化为字符串

 2. 使用render直接加载

   return  render (request, ’模板名称’ , {参数字典})

 

4. url()函数的name参数(这个用法是比较灵活的)

urlpatterns = [

 url( regex,views , kwargs =None, name = None)

]

name: 定义当前url的别名,允许在Template中使用别名来

例如:

urlpatterns = [

 url( regex,views , kwargs =None, name = ’my’)

]

在超链接中用得很多

需要使用标签

{% url ‘name值’%}    #服务器解析

<a href=’ {%url  ‘ my’  %}’ >去往second 页面</a>

注意:name别名不能重复定义  

url参数

<a href=’/music/show/35’> 去往show/35地址的页面</a>  #不用别名的条件下写全路由 

<a href=’ {%url  ‘ my’  87 %}’ >去往show/87页面</a>  #传参数,直接在’别名’ 后加空格加参数

 

模板语法:

1. 变量

  作用:允许将后端的数据传递给模板(html),模板中,会根据变量实际值进行显示

  1)允许传递给变量的数据类型

   数字,字符串,列表,元组,字典,函数,对象(类) (注意:集合不行)

   注意:函数一定要返回值

  2)如何传递变量到模板中

render

dict={

 ‘变量1’:’值1’,

‘变量1’:’值1’,

}

return  render(request, ‘xx.html’,dict)

 

重点:

   如果是传列表,元组,字典等,先组织好数据,再把数据放dict中

   例如:

dict ={

 ‘l’ :list,

 ‘d’ :dict,

}

或者用locals()将局部变量组织成字典传入参数,对象除外

  3)模板中获取变量的值

   {{ 变量名称}}      #字符串

   {{变量名称.1}}     #列表/元组

   {{变量名称. key}}    #字典

   {{函数名}}         #函数

   {{类名.方法名 }}    #对象

 

2. 标签 (具体更多标签用法可以看看官方文档)

1)什么是标签?

允许嵌套一些服务器段端的逻辑运算到模板中

而变量只管数值,标签管运算

 2)语法

  {% %}

注意:写的过程运算符,变量都必须用空格隔开

常用标签

1. {% if 条件%}   #条件可以用简单逻辑判断,例如 >  <  == 等等

     {% else  %}

     {% end if %}

接受not, and ,or 运算

但是 and  和  or不能同时出现

以下内容当做False处理:

   空[]

   空 ()

   空{}

数值0

空字符串

None

 

 {% ifequal  值1  值2 %}   #判断值1 和值2是否相等,相当于值1 ==值2

 {% else %}

 {% endifequal %}

 

2. for标签

 {% for  变量  in  列表| 元组 | 字典 %}

 {% endfor%}

 

允许使用的内置变量(免声明):

   forloop

  1. forloop.counter :记录循环次数,从1开始

  2. forloop.counter0 :同上,从0开始

  3. forloop.revcounter:记录未被遍历的数量

  4. forloop.revcounter0 :同上,从0开始

  5. forloop.first : 布尔值,标记是否是第一个项(通常对第一个、最后一个做一些样式设置)

  6. forloop.first : 布尔值,标记是否是最后一个项

 

<li  { % if  forloop.first  %} style= ‘color:red’ {% endif%} ></li>

 

3.过滤器

在显示变量之前,运行对数据进行筛选或改变

语法:

{{ var | 过滤器}}

常用过滤器:

1. {{var| upper}}

 将英文字母改写为大写

2. {{var| lower}}

   将英文字母改写为小写

常用的过滤器

1. 加法操作

var|add : ‘ num’

first | add: second   #first 和 second 是两个数字类型的列表

 

2.对小数进行四舍五入(金融和交系统)

 var | floatformat:num  # num指定保留多少位小数

 

3. 超长的字符显示省略号(一些字符串显示)

value | truncatechars:num   #num指定保留的字符数

value | truncatewords: num

 

也可以用css实现

white-space:nowrap

text-overflow:ellipsis

以上是关于Django基础篇--模板和路由分发的主要内容,如果未能解决你的问题,请参考以下文章

django之路由分发

django之路由分组,路由分发,FBV,CBV,ORM框架

Django URL路由分发系统

Django 路由分发

数据库表中字段的增删改查,路由基础.有名无名分组.多app共存的路由分配.多app共存时模板冲突问题.创建app流程.七路由分发.八路由别名,九名称空间.十反向解析.十

Django之路由层 (有名和无名分组 反向解析 路由分发 名称空间)