Django模板语言进阶

一、母板
1、什么情况下使用母版
    当多个页面的大部分内容都一样的时候,我们可以把相同的部分提取出来,放到一个单独的母版HTML文件中
    然后在母版中定义需要被替换的block

例如:母板页面
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>母板HTML</title>

  {% block page-css %}

  {% endblock %}

</head>
<body>

<h1>母板内容</h1>

{% block page-main %}

{% endblock %}

<h1>JS</h1>
{% block page-js %}

{% endblock %}</body>
</html>

2、在子页面继承母板(相当于把母板所有代码复制过来)
{% extends ‘母板名.html‘ %}

3、块(block)
通过在母板中使用{% block  xxx %}来定义"块"。
在子页面中通过定义母板中的block名来对应替换母板中相应的内容
注意:在母板中block只是定义,里面并没有内容的,子页面才填充内容

{% block page-main %}
    <p>子页面的内容</p>
{% endblock %}

{% block page-js %}
    <p>子页面的js</p>
    <script src="/static/js/myjs.js"></script>
{% endblock %}

{% block page-css %}
    <p>子页面的css</p>
    <link rel="stylesheet" href="/static/css/mycss.css">
{% endblock %}

二、组件
1.、什么时候用组件?
    页面上相对独立的某个部分可以单独拿出来放到一个单独的html文件中
2.、如何使用
    1. {% inclue ‘组件.html‘ %}

三、静态文件相关
1. 为什么要使用
    把静态文件的路径改成动态拼接的,避免在HTML页面中硬编码静态文件的导入路径

2. 如何使用
先导入static模块:{% load static %}
两种使用方法:
    1. <link rel="stylesheet" href="{% static ‘bootstrap-3.3.7/css/bootstrap.css‘ %}">

    2. <link rel="stylesheet" href="{% get_static_prefix %}font-awesome-4.7.0/css/font-awesome.css">

3、自定义simple_tag
和自定义filter类似,只不过接收更灵活的参数。
1. 自定义simple_tag的步骤
    1. 在app下面新建一个python package名字叫templatetags
    2. 在上一步的python package中新建一个py文件(my_extends.py)
    3. 在py文件中写一个函数,实现自定义的simple_tag功能
    4. 告诉Django我现在多了一个自定义的tag
    5.例子
        from django import template
        from django.conf import settings
        # 生成一个注册对象
        register = template.Library()

        # 自定义一个拼接静态文件路径的tag函数
        @register.simple_tag(name=‘myst‘)
        def my_static(s):
            # 拿到settings.py中的STATIC_URL的值
            s1 = settings.STATIC_URL
            # 进行字符串拼接
            ret = s1 + s
            # 返回
            return ret

2. 使用自定义的tag
    1. 在HTML文件中导入刚才创建的py文件
        {% load my_extends %}
    2. 重启Django项目
    3. 按照普通的tag调用自定义的函数
        <link rel="stylesheet" href="{% myst ‘index/index.css‘ %}">

4、自定义inclusion_tag
多用于返回html代码片段
跟上面自定义的步骤一样,只是代码有点不同
inclusion_tag相当于定义了一个局部的HTML,然后别的页面可以引用这段HTML代码
例如:
my_extends.py

@register.inclusion_tag(filename=‘p.html‘, name=‘pp‘)
def my_p(num):
    data = [i for i in range(1, num+1)]
    return {‘data‘: data}

p.html

{% for i in data %}
    <span>{{ i }}</span>
{% endfor %}    

test.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="content-type" charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>test</title>
</head>

<body>

{% load my_extend %}
{% pp 10 %}

</body>
</html>

解释:
filename是inclusion_tag指定的页面,接收inclusion_tag函数返回值,name是调用时的tags名,
调用的参数是从my_p接收,返回的内容是filename指定的页面的内容。
也就是说,上面的代码,最终展示的页面是test.html,
{% load my_extend %}
{% pp 10 %}
上面两句话是导入了my_extend自定义的tags
pp是tags的具体一个方法,10是参数,pp会把10这个参数传给p.html,
最后在test,html页面显示p.html的那部分代码,相当于把p.html的代码嵌入到了test,html里面展示出来

原文地址:https://www.cnblogs.com/Zzbj/p/9898526.html

时间: 2024-10-04 18:27:54

Django模板语言进阶的相关文章

Django模板语言小记

1.blog.views.py  # Create your views here. from django.template import loader,Context from django.http import HttpResponse from blog.models import BlogPost def archive(request):     posts = BlogPost.objects.all()     t = loader.get_template('archive.

django 模板语言

Django的模板语言的目的是取得力量和易用性之间的平衡,与其他的模板语言相比,django模板语言显得更简单,更专一, django模板系统由模板,变量,过滤器,标签,注释等主要部分组成 模板 一个模板是一个简单的文本文件,它可以生成任何基于文本的格式,html,csv,xml等等 模板里面包含变量,过滤器,标签和注释,下面是一个简单的模板文件 {% extends "base_generic.html" %} {% block title %}{{ section.title }}

Django模板语言

常用语法 {{  }}和{% %} 变量相关的用{{}} , 逻辑相关的用{% %} 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身. 变量 的命名包括任何字母数字以及下划线 ("_")的组合(不提倡数字开头). 变量名称中 不能有空格或标点符号. 点(.)在模板语言中有特殊的含义.当模版系统遇到点("."),它将以这样的顺序 查询: 字典查询(Dictionary lookup)

Django模板语言相关内容

Django模板系统 官方文档:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值. 几个例子: view中代码: def template_test(requ

Django(模板语言-自定义filter和simple_tag)

filter过滤器的主要形式:变量|函数,意思是将变量交给函数处理,而自定义filter就是自己定义函数,因为用到已有的很少. 1.在当前app中创建templatetags模块(包:带__init__.py)(必须的) 2.在templatetags中创建.py文件,如my_tags.py from django import template #因为要应用到前端模板语言,必须导入template from django.utils.safestring import mark_safe re

Django模板语言-Filters(过滤器)

Filters(过滤器) 在Django的模板语言中,通过使用 过滤器 来改变变量的显示. 过滤器的语法: {{ value|filter_name:参数 }} 使用管道符"|"来应用过滤器. 例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值.lower在这里的作用是将文本全都变成小写. 注意事项: 过滤器支持“链式”操作.即一个过滤器的输出作为另一个过滤器的输入. 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }}

Django模板语言-Tags

Tags Tags # 普通for循环 <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul> for循环可用的一些参数: Variable Description forloop.counter 当前循环的索引值(从1开始) forloop.counter0 当前循环的索引值(从0开始) forloop.revcounter 当前循环的倒序索引值(从1开始)

Django 模板语言从后端传到前端

如果我们在后端有数据动态提取到前端的时候 就需要模板语言加以渲染后再将渲染好的HTML文件传入前端 我们的views.py里的index函数里有个s变量是个列表,将数据以大括号的形式传入{"list":s} 把s传入list. html的要加入的地方是用2个大括号引入的   <h1>{{ list.1 }}</h1> 用的是句点符获取列表第二个参数 和python的语法取得列表不同(list[1]) -------------------------------

Django模板语言(DTL)基础

## 模板变量 - 普通变量 {{ name }} - 对象变量(使用点号访问对象属性和方法,方法不加括号) {{ person.name }} ## 常用模板标签 # if标签,支持and,or,not和嵌套,不支持括号 {% if %}{% endif %} {% if %}{% elif %}...{% else %}{% endif %} # for标签,用法与Python中基本相同 {% for item in items %}{% endfor %} {% for item in i