django html 模板语言,django模板语言

一般情况下后台提取到数据时候只会以某种数据类型的方式交给HTML页面,如果所有的都编程单个的变量,会严重影响开发效率,这就要求模板拥有基本的逻辑处理能力,故而诞生了模板语言

配置静态文件

如果模板设计需要静态文件的话,必须要在开头添加一下语句

{% load staticfiles %}

然后配置jquery、Bootscript等等

变量

变量的值是来自contex中的输出, t,context对象需要在视图函数中指定,这类似于字典对象的keys到values的映射关系。

context应该这样在views里面定义

def index(request):

book_list = Books.objects.all()

return render(request, 'index1.html', locals())

这样 book_list就可以直接在模板中使用

变量是被 {{和 }}括起来的部分,例如:

My first name is {{ first_name }}. My last name is {{ last_name }}.

如果使用一个 context包含 {'first_name': 'John', 'last_name': 'Doe'}, 这个模板渲染后的情况将是:

My first name is John. My last name is Doe.

深度查询

字典查询,属性查询和列表索引查找都是通过一个点符号来实现:

{{ my_dict.key }}

{{ my_object.attribute }}

{{ my_list.0 }}

如果一个变量被解析为一个可调用的,模板系统会调用它不带任何参数,并使用调用它的结果来代替这个可调用对象本身。

过滤器

过滤器会更改变量或标签参数的值。

看上去像这样:

{{ django|title }}

例如在 {'django': 'the web framework for perfectionists with deadlines'}这个context中,django变量的值都是小写,经title过滤器渲染后则变成:

The Web Framework For Perfectionists With Deadlines

有些过滤器看起来更像参数:

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

还有很多过滤器

add 把add后的参数加给value

{{ first|add:second }}

first是 [1, 2, 3],second是 [4, 5, 6], 将会输出 [1, 2, 3, 4, 5, 6].

addslashes :在引号前面加上斜杠

{{ value|addslashes }}

如果value是 "I'm using Django", 输出将变成 "I'm using Django".

capfirst:大写变量的第一个字母

{{ value|capfirst }}

如果 value 是 "django", 输出将变成 "Django".

center:使value在给定的宽度范围内居中

"{{ value|center:"15" }}"

如果value是"Django",输出将是“ Django t7>。

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

{{ value|cut:" " }}

如果value为“String with spaces”,输出将为"Stringwithspaces"。

还有safe, default, truncateword等等

自定义过滤器

自定义过滤器其实和自定义标签是很相似的,其目的都是为了使显示达到自己想要的内容或者格式

创建 assets.py,和二中tag在同一目录下,其作用是在全局变量的变动下加载不同的css

首先在settings.py文件中 设置一个变量 IS_DEVELOP=True,作用是当问true时加载测试的css,False时加载正常用的css

asserts.py:

from django import template

from my_blog.settings import IS_DEVELOP

register = template.Library()

@register.filter

def assets(value):

if IS_DEVELOP:

return "/static/css/test.css"

return "/static/css/base_css/base_logre.css"

在base.html中做如下修改

{% load assets %}

标签

标签在渲染的过程中提供任意的逻辑。

这个定义是刻意模糊的。例如,一个标签可以输出内容,作为控制结构,例如“if”语句或“for”循环从数据库中提取内容,甚至可以访问其他的模板标签。

Tags是由{%和 %} 来定义的,例如:

{% csrf_token %}

大部分标签都接受参数

{%< cycle 'odd' 'even' %}

部分标签要求使用起始和闭合标签:

{%< if user.is_authenticated %}Hello, {{ user.username }}.{%< endif %}

还可以进行循环

{% for book in book_list %}

{{ book.id }}{{ book.title }}{{ book.price }}{{ book.date }}{{ book.publish }}{{ book.auth }}

{% endfor %}

还能进行很多{% if %}等等

自定义标签

首先在你要加载这个tag的app中新建一个名为templatetags的Python Package,在这个包里面创建一个模块,模块里面就是自定义的标签,引入的时候直接引入这个模块的名字即可 { % load 模块名 % }

编写

比如模块文件名为my_tag.py

from django import template

from django.utils.safestring import mark_safe

register = template.Library() #register的名字是固定的,不可改变

@register.simple_tag

def simple_tag_multi(v1,v2):

return v1 * v2

@register.simple_tag

def my_input(id,arg):

result = "" %(id,arg,)

return mark_safe(result)

在模板中导入的时候

{% load mytags %}

{% simple_tag_multi 2 5 %} 参数不限,但不能放在if for语句中

{% simple_tag_multi num 5 %}

注意:

为了让 {{ load }} 标签工作,包含自定义标签的应用必须在INSTALLED_APPS中。

app下创建的包必须为templatetags

包里面可以创建任意多个任意名字的模块,只是引用的时候引用相应的模块名即可

模板的继承

基类

{% block title %}{% endblock %}

{% block container%}

{% endblock %}

模板使用

{% extends "base_logre.html" %}

{% block title %}

欢迎登陆CyanScikit科技网站

{% endblock %}

{% block container %}

...新的内容

{% endblock %}

注意的几点:

开头引用基类{% extends "base_logre.html" %}

然后在类里面补充内容

{% block title %}

欢迎登陆CyanScikit科技网站

{% endblock %}

一个基类可以创建很多个引用块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值