Django框架-04模板层相关

模板语法

{{ }} 变量相关
{%%} 逻辑相关

ps: 前端获取后端传过来的容器类型的内部元素 统一采用句点符(.)

过滤器: |

default

  • {{ value|default:"nothing"}}

length

  • {{ value|length }}

filesizeformat

  • {{ value|filesizeformat }}

slice

  • {{value|slice:"2:-1"}}

date

  • {{ value|date:"Y-m-d H:i:s"}}

safe

  • {{ value|safe}}

    前后端取消转义:
    前端:
    |safe
    后端:
    from django.utils.safestring import mark_safe
    zzz = mark_safe('<h1>床前明月 光</h1>')

truncatechars

  • {{ value|truncatechars:9}}

truncatewords

  • {{ value|truncatewords:9}}

cut

  • {{ value|cut:' ' }}

    • 移除value中所有的与给出的变量相同的字符串

join

标签:

for循环

{% for foo in d.keys %}
	<p>{{ foo }}</p>
{% endfor %}
{% for foo in d.values %}
	<p>{{ foo }}</p>
{% endfor %}
{% for foo in d.items %}
	<p>{{ foo }}</p>
{% endfor %}

for循环可用的一些参数:

Variable Description
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环

for ... empty

<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% empty %}
    <li>空空如也</li>
{% endfor %}
</ul>

if判断

if,elif和else

{% if user_list %}
  用户人数:{{ user_list|length }}
{% elif black_list %}
  黑名单数:{{ black_list|length }}
{% else %}
  没有用户
{% endif %}

当然也可以只有if和else

{% if user_list|length > 5 %}
  七座豪华SUV
{% else %}
    黄包车
{% endif %}

ps: if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。

with取别名

可以给一个比较复杂的取值操作取一个别名 之后在with语句中 就可以使用该别名

{% with l.6.3.name as ttt %}      
	{{ ttt }}    
	{{ l.6.3.name }}
{% endwith %}

csrf_token

这个标签用于跨站请求伪造保护。

在页面的form表单里面写上 {% csrf_token %}

自定义过滤器

在app位置创建一个 templatetags文件加 里面放相关的逻辑py文件

from django import template

register=template.Library ()

@register.filter(name="nash") # 自定义过滤器只是带有一个或两个参数的Python函数

@register.filter(name="nash") 
def index(a,b):
	print('下午刚起床 一脸懵逼')
	return a + b

使用自定义过滤器

先导入 格式为 {{ 操作对象(作为第一个参数传入)|名字(可写==> :另一个参数) }}

{# 先导入我们自定义filter那个文件 #}
{% load app01_filters %}

{# 使用我们自定义的filter,这边对于的是取的名字 #}
{{ "hello"|nash:"world" }}

自定义标签

from django import template

register = template.Library ()

@register.simple_tag(name="nash") # 标签函数可以可传多参数

@register.simple_tag(name='apan')
def xxx(a,b,c,year):
	return '%s?%s|%s{%s'%(a,b,c,year)

使用自定义标签

先导入 格式为 {% 名字 空格隔开的参数 %}

{# 先导入我们自定义simple_tag那个文件 #}
{% load app01_simple_tag %}

{# 使用我们自定义的simple_tag #}
{% apan "9 "22 "11:41" "2019" %}

inclusion_tag

多用于返回html代码片段

register = template.Libary ()

@register.inclusion_tag(模版名,name=名字)

使用inclusion_tag

先导入 {% load 名字 %} 格式 {% 函数名 参数 %}

模板的继承与导入

我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。

母版

	{% block 给区域起的名字 %}

	{% endblock %}
	
	通常情况下一个模板中应该至少有三块
		{% block css %}
			页面css代码块
		{% endblock %}

		{% block js %}
			页面js代码块
		{% endblock %}

		{% block content %}
			页面主体内容
		{% endblock %}
子板继承模板
		先继承模板所有的内容
		{% extends 'home.html' %}
		
		然后根据block块的名字修改指定区域的内容
		{% block content %}
			<h1>登录页面</h1>
				<form action="">
					<p>username:<input type="text" class="form-control"></p>
					<p>password:<input type="text" class="form-control"></p>
					<input type="submit" class="btn btn-success">
				</form>
		{% endblock %}

块(block)

通过在母板中使用{% block xxx %}来定义"块"。

在子页面中通过定义母板中的block名来对应替换母板中相应的内容。

{% block page-main %}
  <p>世情薄</p>
  <p>人情恶</p>
  <p>雨送黄昏花易落</p>
{% endblock %}

组件(模版的导入, 一般都用 inclusion_tag 来代替)

可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。

{% include 'navbar.html' %}

静态文件配置

{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

引用JS文件时使用:

{% load static %}
<script src="{% static "mytest.js" %}"></script>
posted @ 2019-09-22 15:00  suren_apan  阅读(112)  评论(0编辑  收藏  举报