常用语法
后端如何向前端发送数据:
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 js %}{% endblock %}{% block content %} {% include 'order.html' %} {% endblock %}
对于该母版我们分为三块css,js,以及content 。用block来划分区域
我们可以继承母版的css和js,只需要简单改变一下content就可以实现继承之后的修改
不妨来个注册和登录
注册:reg.html这是全代码 不要文件头和文件体,因为已经继承了母版
{% extends 'home.html' %}{% block content %}{% endblock %}注册页面
登录:login.html
{% extends 'home.html' %}{% block content %}{% include 'order.html' %}{% endblock %}登录页面
这时候我们已经把要导入的模块放进母版和login.html里面了
只需要将
{% include 'order.html' %}注销看到导入前的样子了 把order的HTML文件也放上来
我是这条gai最靓的仔
只要思想不滑坡 办法总比困难多,你懂得!