美文网首页
Django模板标签

Django模板标签

作者: LinearPi | 来源:发表于2018-08-09 11:04 被阅读0次

知识点:

  1. 基本概念
  2. 常用标签
  3. 模板标签例子
  4. 模板继承与应用
  5. 注释标签
  6. 模板文件路径设置

模板标签

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

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

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

大部分标签都接受参数。

常用标签

(1)if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断。ifequal/ifnotequal
(2)for…in…:跟python中的for…in…是一样的用法。
forloop.counter:当前迭代的次数,下标从1开始。
forloop.counter0:当前迭代的次数,下标从0开始。
forloop.revcounter:跟forloop.counter一样,下标从大到小。
forloop.revcounter0:跟forloop.counter0一样,下标从大到小。
forloop.first:返回bool类型,如果是第一次迭代,返回true,否则返回false。
forloop.last:返回bool类型,如果是最后一次迭代,返回True,否则返回False。
forloop.parentloop:如果发生多层for循环嵌套,那么这个变量返回的是上一层的for
(3)for…in…empty…:如果没有数据,跳转到empty中。
(4)load:加载第三方标签。最常用的是{%load static%}
(5)url:返回一个命名了的URL的绝对路径。
(6)with:缓存一个变量。
(7)autoescape:开启和关闭自动转义。

模板标签例子

# movie/views.py
from django.shortcuts import render

def index_5(request,x):
    return render(request,'hello.html',context={'name':x})

{# movie/templates/movie/hello.html#}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hello</title>
</head>
<body>
    {% if name == "python" %}
        欢迎浏览{{ name }}
    {% elif name == "django"%}
        欢迎浏览{{ name }}
    {% else %}
        哈哈哈
    {% endif %}
</body>
</html>

# for的使用
{% for i in list %}
    {% if forloop.counter0 ==5 %}
        <li>这是一个值:{{ i }}</li>
    {% else %}
           <li>{{ i }}</li>
    {% endif %}
{% endfor %}

# url 页面转换

# --------------url.py--------------
urlpatterns = [
    url(r'^test$',views.test,name='test_alias'),
    url(r'^books/([\s\S]*)$',views.index_5,name='bn_alias'),]

# --------------hello.html--------------
<a href={% url 'test_alias' %}> test 页面</a>

# --------------views.py--------------
def test(request):
    return HttpResponse('test page!!!!!!!')
    

# with的使用

# --------------url.py--------------
urlpatterns = [
    url(r'^books/([\s\S]*)$',views.hello_books,name='books_url'),
    url(r'^new_books/([\s\S]*)$',views.hello_new_books,name='new_books_url'),]
    
# --------------views.py--------------
def hello_books(request,bn):
    return render(request,'hello_books.html',{'books_name':bn})

def hello_new_books(request,bn):
    return render(request,'hello_new_books.html',{'books_name':bn})

# --------------hello_books.html--------------
<body>
{% with BN=books_name %}
    这里是旧版{{ books_name }}的主页<br>
    <a href="{% url 'new_books_url' BN %}">
新版{{ BN }}主页
    </a>
    <br>
    当前书籍是:{{ BN }}
{% endwith %}
</body>

# --------------hello_new_books.html--------------
<body>
<h1>欢迎来到 新的 {{ books_name }} 页面</h1>
</body>

# autoescape的使用

# --------------views.py--------------
def hello_books(request,bn):
    u = "<a href='/polls/new_books/%s'>点击新版%s主页</a>"%(bn,bn)
    return render(request,'hello_books.html',{'books_name':bn,
                                              "url_data":u})

# --------------hello_books.html--------------
<body>
{% with BN=books_name %}
    这里是旧版{{ books_name }}的主页
    没做修改的:{{ url_data }}<br>
    safe方法:{{ url_data | safe }}<br>
    {% autoescape off %}
        autoescape方法:{{ url_data }}
    {% endautoescape %}
{% endwith %}
</body>

模板继承与引用

Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。

继承:

模板继承使用extends标签实现。通过使用block来给子模板开放接口。

1、extends必须是模板中的第一个出现的标签。

2、子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。

3、如果出现重复代码,就应该考虑使用模板。

4、尽可能多的定义block,方便子模板实现更细的需求。

5、如果在某个block中,要使用父模板的内容,使用block.super获取。

引用

引用:include标签可以包含一个html模板到当前模板中。和继承不同,include是把html模板在此处展开。

例如:{% include ‘head.html’%}

例子:

{# music/templates/music/base.html#}   
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}这是默认标题{% endblock %}</title>
</head>
<body>
{% block content %}
    这是默认内容
{% endblock %}
<br>
{% block demo %}
    这是默认演示
{% endblock %}
</body>
</html>

{# music/templates/music/ss.html#}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内容</title>
</head>
<body>
潭州教育Python学院 web开发14班
</body>
</html>

{# music/templates/music/index.html #}
{% extends 'music/base.html' %}
{% block title %}music主页{% endblock %}
{% block content %}
    这句是通过block.super继承父类的:{{ block.super }}<br>
    这是子模板自己的内容:没有写block就不会显示
{% endblock %}
{% block demo %}
    这是通过include引用的其他模板的内容:{% include 'music/ss.html' %}
{% endblock %}

注释标签

1、{#被注释的内容#}:将中间的内容注释掉。只能单行注释。
2、{comment}被注释的内容{endcomment}:可以多行注释。

模板文件路径设置

模板引擎通过TEMPLATES 设置来配置。 它是一个设置选项列表,与引擎一一对应。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

BACKEND是一个指向实现了Django模板后端API的模板引擎类的带点的Python路径。 内置的后端有django.template.backends.django.DjangoTemplates 和 django.template.backends.jinja2.Jinja2。

由于绝大多数引擎都是从文件加载模板的,所以每种模板引擎都包含两项通用设置DIRS和DIRS选项, 是一个字符串列表,告诉Django 你的模板目录在哪,可以是绝对路径也可以是相对路径。模板引擎按列表顺序搜索这些目录以查找模板源文件。

APP_DIRS告诉模板引擎是否应该进入每个已安装的应用中查找模板。 django为它自己的模板引擎指定的是 ‘templates’ 。

OPTIONS中包含了具体的backend设置,context_processors 叫做上下文处理器 —— 的列表,它们接收一个请求对象作为它们的参数并返回需要向上下文中添加的字典。

之前我们所有的模板文件都是放在了安装好了的app里面,在app里面创建好templates文件目录就调用里面的模板。

相关文章

  • Django handy notes

    Django Handy Notes 如何关闭Django模板的自动转义 Django的模板中会对HTML标签和J...

  • Django模板标签

    知识点: 基本概念 常用标签 模板标签例子 模板继承与应用 注释标签 模板文件路径设置 模板标签 标签在渲染的过程...

  • Django模板标签

    这里只讨论Django的常用标签,以及模板的继承与引用。 Django的常用标签: 标签在渲染的过程中提供任意的逻...

  • u'with' expected at leas

    Django 1.5.4中模板标签bug 会报u'with' expected at least one vari...

  • 第五章 在线教育平台(列表详情页的开发

    列表详情页的开发 标签: django django template继承 模板继承 文件上传位置 base.ht...

  • django URL模板标签

    以register为例 urls.py views.py register.html

  • Django - 模板标签详解

    接着上一篇 urls与视图详解 继续往下讲 一、模板查找路径 mysite/setting.py: 模板查找的优先...

  • django markdown语法

    django文章markdown化 如不转义出现html标签则在模板中将 {{text}} 改成 {{text|s...

  • 高级自定义模板标签

    有时,自定义模板标签创建的基本功能是不够的。 别担心,Django可以让您完全访问从底层构建模板标签所需的内部组件...

  • 模板代码中的国际化

    Django模板中的翻译使用了两个模板标签,与Python代码中的语法略有不同。 为了让您的模板可以访问这些代码,...

网友评论

      本文标题:Django模板标签

      本文链接:https://www.haomeiwen.com/subject/bqsqbftx.html