Django模版-标签-过滤器-模版继承

作者: 鲁智深 分类: django 发布时间: 2018-01-15 01:18

配置模版引擎

模板引擎通过TEMPLATES 设置来配置。它是一个设置选项列表,与引擎一一对应。默认的值为空。由startproject命令生成的settings.py 定义了一些有用的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

for

1
2
3
4
5
6
7
8
{% for article in articles %}
    <div class="content">
        <h2><a href="detail/{{ article.id }}">文章标题:{{ article.title }}</a></h2>
        <span>发布时间:{{ article.push_date }}</span>&nbsp&nbsp&nbsp
        <span>阅读数量:{{ article.click_num }}</span>&nbsp&nbsp&nbsp
        <span><a href="detail2/{{ article.author_id }}">作者:{{ article.author }}</a></span>&nbsp&nbsp&nbsp
        <p><b>简介</b>{{ article.content|truncatechars:99 }}</p>
    </div>

if

1
2
3
4
5
6
7
{% if a %}
    {% for v in  a %}
        {{ v }}
    {% endfor %}
{% else %}
    无数据
{% endif %}

empty

1
2
3
4
5
{% for item in empty_list %}
    {{ item }}
{% empty %}
    列表是空的
{% endfor %}

include

1
{% include ‘header.html’  %}

过滤器

http://python.usyiyi.cn/documents/django_182/ref/templates/builtins.html

自定义过滤器

在应用下创建python包templatetags

创建包

创建包


在包里创建要自定义的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# coding: utf-8
from django import  template
# 实现注册的方法,
register = template.Library()

# 通过register的装饰器, 扩展filter的功能
# 把自定义的函数,注册为过滤器
@register.filter('my_percent')
# 实现自定的函数
def my_percent(value):
    try:
        return str(value) + '%'
    except Exception as e:
        print(e.message)

在模板里使用时要首先{% load 自定义的文件%}

模版中使用

模版中使用


注释

1
{%comment %} {% endcomment%}

模板调用类的属性和类方法

在Views.py文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Test(object):
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def test1(self):
        return "这是test1"

def test2(request):
    test = Test('aaa','bbb','ccc')
    test4 = test.test1()
    content = {'test':test,'test4':test4}
    return render(request, 'myblog/index.html',content)

在模版中

1
2
3
{{ test.name }}
{{ test.test1 }}
{{ test4 }}

加载静态文件

1.在setting.py中配置静态文件的根目录

2.在项目根目录创建static的python 包,放入静态文件

3.在页面中使用:{% loadstaticfle %}

Setting.py配置

1
2
3
4
# 静态文件
STATCFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

创建python的包

创建python的包

创建python的包

模板中使用

1
{% load staticfiles %}
1
2
3
4
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    <link rel="stylesheet" href="{% static 'css/bootstrap-theme.min.css' %}">
    <link rel="stylesheet" href="{% static 'js/jquery.min.js' %}">
    <link rel="stylesheet" href="{% static 'js/bootstrap.min.js' %}">

模板的继承

模板继承可以减少页面内容的重复定义,实现页面内容的重用

典型应用:网站的头部、尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义

block标签:在父模板中预留区域,在子模板中填充

extends继承:继承,写在模板文件的第一行

定义父模板base.html

1
2
3
4
{ %block block_name%}
这里可以定义默认值
如果不定义默认值,则表示空字符串
{ %endblock%}

定义子模板index.html

1
{ % extends "base.html" %}

在子模板中使用block填充预留区域

1
2
3
{ %block block_name%}
实际填充内容
{ %endblock%}

说明

如果在模版中使用extends标签,它必须是模版中的第一个标签

不能在一个模版中定义多个相同名字的block标签

子模版不必定义全部父模版中的blocks,如果子模版没有定义block,则使用了父模版中的默认值

如果发现在模板中大量的复制内容,那就应该把内容移动到父模板中

使用可以获取父模板中block的内容

为了更好的可读性,可以给endblock标签一个名字

1
2
3
{ % block block_name %}
区域内容
{ % endblock block_name %}

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注