博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django模板层 (标签,过滤器,自定义inclusion_tag,模板的继承与导入)
阅读量:5116 次
发布时间:2019-06-13

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

后端朝前端页面传递数据的方式:return HttpResponse(''字符串类型)    具体参照上一篇博客的视图层此处主要介绍通过 render方式传值:第一种:return render(request,'text.html',{'n':n}#此处的'n'是一个key,n才是要传过去的变量名对应的值,必须通过字典形式传第二种:return render(request,'tetx.html',local())#将当前所在的名称空间的名字全部传递给前端页面后端传函数名到前端(包含对象.方法 本质还是传函数名),会自动加括号调用,可以在前端html页面打印返回值,但是不支持传参		    后端传对象到前端,就相当于打印了这个对象,不定义__str__的话,打印函数地址前端获取后端传过来的容器类型的内部元素 统一采用句点符(.)  需要注意,集合无法索引取值t={'name':['a','b']}     >>>     {
{t.name.1}} #b 数字对应的就是列表的索引前端的模板语法可以调用python后端数据类型不需要传参的内置方法。 django的模板注释 》》》 {# 是不会出现在前端页面的 #} 原生的html注释 》》》

  

过滤器:                

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

{ s|length }}

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

{ flag|default:'你这个东西是个空'}}

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

{ file_size|filesizeformat }}

{

{ ctime }}

格式化时间(不要加百分号){

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

字符串的切片操作:{

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

{

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

截取固定的长度的字符串 三个点也算:{

{ s|truncatechars:10 }}

按照空格截取文本内容:{

{ res|truncatewords:4 }}

{

{ s|truncatewords:4 }}

{

{ 'hahah'|add:'heheheh' }}

{#重点#}

{

{ ht }}

ht ='

段落

'

{

{ sr }}

{

{ ht|safe }}

sr = sr = ''

{

{ sr|safe }}

通过添加safe,将字符串类型的样式在html页面展示出来 当后端传入css样式的字符串时,前端可通过{
{xxx|safe}} 来实现样式的正常渲染 也可以直接传入该字符串对应的变量名,前提是后端已经做好了处理:如下from django.utils.safestring import mark_safexxx = mark_safe('

我是h1标签

')前端可以直接使用{
{xxx}},不需要添加safe

  

标签:for 循环{% for foo in t %}    {
{foo}} {
{forloop}}{% endfor %}此处的forloop是 一个内置方法if 判断{% if flag %} flag不为空 {% else %} flag为空{% endif %}嵌套使用 当for循环对象l为空时,会触发empty代码块的内容 {% for foo in l %} {% if forloop.first %}

这是我的第一次

{% elif forloop.last %}

这是最后一次了啊

{% else %}

嗨起来!!!

{% endif %} {% empty %}

你给我的容器类型是个空啊,没法for循环

{% endfor %}

  

自定义过滤器、标签、inclusion_tag前提:1.在应用名下新建一个名为templatetags文件夹(必须叫这个名字)2.在该新建的文件夹内新建一个任意名称的py文件3.在该py文件中需要固定写下面两句代码	from django import template				register = template.Library()一、自定义过滤器   前端只能传两个值,传多个值需要用可索引取值的python类型括起来,然后回去文件里做逻辑处理@register.filter(name='xbb')def index(a,b):    return a+b在前端调用: {
{110|xbb: 120}} 二、自定义标签@register.simple_tag(name='heh')def plus(a,b,c): return a+b+c在前端调用:{% heh 11 22 33%}三、自定义inclusion_tag@register.inclusion_tag('login.html',name='login') #第一个参数为调用的html页面def login(n): #n为在另一个前端页面传入的参数 l = [ '第%s项'%i for i in range(n)] #列表推导式 return {'l':l} #将l返回给login.html页面 在login.html页面,可以只存在一段代码块即可:
    {% for foo in l %}
  • {
    { foo }}
  • {% endfor %}
在另外一个前端页面调用: {% login 10 %} #完成传值后,login.html页面代码块交由当前页面渲染执行。需要注意:上述三者的调用时,需要事先加载所属的py文件 {% load xxx %}

  

模板的继承与导入一:继承首先需要在被继承的模板中划分多个区域     #模板名字为 home.html{% block 取的名字 %}      #名字选为 content    内部代码块{% endblock %}通常情况下,一个模板中至少有三块{% block css %}  页面css代码块{% endblock %}{% block css %}  页面js代码块{% endblock %}{% block css %}  页面主体代码块{% endblock %}子板继承模板1、先继承模板的所有内容{% extends 'home.html' %}2、再根据block块的名字修改指定区域的内容{% block content %}  需要修改的代码{% endblock %}注:如果不想改变原始效果,可通过{
{block.super()}} 来继续使用模板的样式二:导入 将一段html当做模块的方式导入到另一个html展示{% include '想导入的html文件名’ %}

  

静态文件配置{% load static %}          
# 第一种方式
# 第二种方式

  

转载于:https://www.cnblogs.com/changwenjun-666/p/11006656.html

你可能感兴趣的文章
Repeater + Resources 列表 [原创][分享]
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
【转】 FPGA设计的四种常用思想与技巧
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>
新手算法学习之路----二叉树(在一个二叉查找树中插入一个节点)
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
基于C#编程语言的Mysql常用操作
查看>>
s3c2440实验---定时器
查看>>
MyEclipse10安装SVN插件
查看>>
[转]: 视图和表的区别和联系
查看>>
Regular Experssion
查看>>
图论例题1——NOIP2015信息传递
查看>>
uCOS-II中的任务切换-图解多种任务调度时机与问题
查看>>