博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django之模板层
阅读量:5320 次
发布时间:2019-06-14

本文共 5460 字,大约阅读时间需要 18 分钟。

常用语法

后端如何向前端发送数据:

from django.shortcuts import render# Create your views here.def index(request):    n=666    s='abcdefg'    l=['1','2','3','4','5']    d={
'name':'jason','password':123} def func(): return 'func has been used' class Demo(object): def __init__(self,name): self.name=name def func(self): return self.name @classmethod def bar(cls): return 'cls' @staticmethod def run(): return 'run' def __str__(self): return 'printed' obj=Demo('khan') return render(request,'index.html',locals())

那么前端如何获取数据的呢?

变量相关的用{

{}},逻辑相关的用{%%}。

点语法在这里起到非常重要的作用(.),按照以下顺序进行查找

字典查询(Dictionary lookup)

属性或方法查询(Attribute or method lookup)
数字索引查询(Numeric index lookup)

在html文件中

 

    
Title

前端统计字符串的长度:{

{ s|length}}

前端获取数据的值如果是空就返回默认值:{

{ flag|default:'内容为空' }}

将数字格式化表示成文件大小:{

{ file_size|filesizeformat }}

格式化时间:{

{ ctime }}

字符串的切片操作:{

{ ctime|date:"Y-m-d" }}

步长为1的从0到7的切片{

{ res|slice:'0:8' }}

步长为2的从0到7的切片{

{ res|slice:'0:8:2' }}

截取固定长度,三个点也算长度{

{ s|truncatechars:10}}

按照空格截取文本内容{

{ s|truncatewords:5 }}

整型或者字符串同类相加{

{ 'hhhhh'|add:'ggggg' }}

原义标签:{

{ ht }}

原义标签:{

{ sr }}

前端转义标签:{

{ sr|safe }}

后端转义标签:{

{ xxx }}

 

 

 

这里面包含了几种滤波器图示结果

标签

 

{% for foo in l %}    {
{ forloop.counter }} {% if forloop.first %}

第一个

{% elif forloop.last %}

最后一个

{% else %}

中间的

{% endif %}{% endfor %}{% for foo in d.keys %}

{

{ foo }}

{% endfor %}{% for foo in d.values %}

{

{ foo }}

{% endfor %}{% for foo in d.items %}

{

{ foo }}

{% endfor %}{% with d.hobby.2 as h %} {
{ h }}{% endwith %}

 

不难看出我们利用for循环和if判断帮助我们获得想要的数据

当然在for循环中我们可以利用一些参数如:

当然还有empty

{% for foo in l %}    {
{ forloop.counter }} {% if forloop.first %}

第一个

{% elif forloop.last %}

最后一个

{% else %}

中间的

{% endif %} {% empty %}

空空如也

{% endfor %}

这时候如果我将l变成空列表,那么就会显示

 

自定义滤波器

必须做下面三件事:

1.必须在应用下新建一个名为templatetags的文件夹
2.在该文件夹下创建一个任意名的py文件
3.在该文件内必须先写下面两句话
from django import template
resgiter = tmplate.Library()
# 自定义过滤器
@register.filter(name='baby')
def my_sum(a,b):
return a+b
使用:
必须先加载过来
{% load my_tag %}
之后的用法跟自带的过滤器用法相同
{
{ xx|baby:10 }}

 

自定义标签

必须做下面三件事:

1.必须在应用下新建一个名为templatetags的文件夹
2.在该文件夹下创建一个任意名的py文件
3.在该文件内必须先写下面两句话
from django import template
resgiter = tmplate.Library()
# 自定义标签
@register.simple_tag(name='plus')
def plus(a,b,c):
return '%s-%s-%s'%(a,b,c)
强调自定义的标签不能再if和for中使用(了解即可)

 

自定义inclusion_tag

 

自定义inclusion_tag

调用自定义的inclusion_tag能够返回一段html代码
# 自定义inclusion_tag
@register.inclusion_tag('login.html')
def get_html(n):
l = []
for i in range(n):
l.append('第%s项'%i)
return {'l':l}

 

from django import templateregister = template.Library()#自定义滤波器@register.filter(name='HBO')def add1(a,b):    return a+b#自定义标签@register.simple_tagdef plus(a,b,c):    return a+b+c#自定义inclusion_tag@register.inclusion_tag('login.html',name='login')def login(n):    l=['第%s项'%i for i in range(n)]    return {
'l':l}

新建一个login.HTML文件这里不需要文件头和文件体的直接上这个代码就可以了

    {% for foo in l %}

    {

    { foo }}

    {% endfor %}

在原来的indexHTML文件里

{% load my_tag %}{
{ 666|HBO:222 }}{% plus 1 2 3 %}{% login 5 %}

 

自定义标签 过滤器 inclusion_tag都是为了能够调用它返回相应的结果

区别:
自定义标签和过滤器返回的仅仅是数据
而inclusion_tag返回的是一段html代码

 

模板的继承与导入

 模板的继承首先需要母版,不妨新建一个home母版

    
Title
{% block css %} {% endblock %}
{% block content %}

Hello, world!

...

Learn more

{% include 'order.html' %} {% endblock %}
{% block js %}{% endblock %}

对于该母版我们分为三块css,js,以及content 。用block来划分区域

我们可以继承母版的css和js,只需要简单改变一下content就可以实现继承之后的修改

不妨来个注册和登录

注册:reg.html这是全代码 不要文件头和文件体,因为已经继承了母版

{% extends 'home.html' %}{% block content %}

注册页面

username:

password:

{% endblock %}

登录:login.html

{% extends 'home.html' %}{% block content %}

登录页面

username:

password:

{% include 'order.html' %}{% endblock %}

这时候我们已经把要导入的模块放进母版和login.html里面了

只需要将

{% include 'order.html' %}注销看到导入前的样子了 把order的HTML文件也放上来

我是这条gai最靓的仔

只要思想不滑坡 办法总比困难多,你懂得!

转载于:https://www.cnblogs.com/guanlei/p/11004826.html

你可能感兴趣的文章
Codeforces Round #469 (Div. 2) D 数学递归 E SCC缩点
查看>>
webAssmebly实现js数组排序 使用custom elements和Shadow DOM自定义组件
查看>>
三个你不知道的CSS技巧
查看>>
[.NET MVC进阶系列03] Views 视图基础
查看>>
gridview 过长字段显示部分
查看>>
利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务
查看>>
初始化Spring Cloud建立Eureka服务注册中心
查看>>
android 学习 之 布局(下)LinearLayout,RelativeLayout,TableLayout,FrameLayout
查看>>
ASP.NET MVC Web API 学习笔记---第一个Web API程序---近来很多大型的平台都公开了Web API...
查看>>
Mac下使用Web服务器性能/压力测试工具webbench、ab、siege
查看>>
linux下配置tomcat开机自启动
查看>>
操作系统简介
查看>>
在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标
查看>>
分割字符串
查看>>
对HTML、CSS、JS的思考
查看>>
SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)...
查看>>
curry&unCurry函数
查看>>
JVM调优
查看>>
防止ViewPager和Fragment结合使用时候的数据预加载
查看>>
c# Webservice技术整理
查看>>