Django模板层part

一、自定义过滤器及标签

当内置的无法满足需求时,这时我们就可以自定义,步骤如下;

1.1 自定义过滤器

第一步: 在settings中INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag;

在这里插入图片描述
第二步: 在app中创建templatetags包(templatetags目录下需要有__init__.py文件,确保它是一个python的包,包名只能是templatetags,不能改);

第三步: 在包内新建py文件,文件名随意,但需保持一致性,方便后期使用,不与其他app冲突;

第四步: 新建文件内写代码;

#一、必须首先在模板顶级定义一个变量register,该变量值为template.Library的实例
from django import template
register = template.Library() # 变量名必须为register,不可改变

自定义过滤器是一个python函数,该函数需要12个参数,两个参数会一同传入
(1) 第一个参数来自过滤器左侧的变量(必须有)
(2) 第二个参数来自过滤右侧的参数值(可有可无)
例如:针对自定义过滤器foo的使用
{{ var|foo:"bar" }},会执行foo(var,"bar")
    
# 只有一个参数
@register.filter(name='cut') # name参数用来命名自定义过滤器
def my_upper(value):
# 将指定的字符串大写转化
   return value.upper()

# 两个参数写法
def cut(value, arg): # 有两个参数
    # 删除指定字符串
    return value.replace(arg, '')

第五步: 模板内使用(需先load,再使用);

{% load my_tags %}
{{ 'aa'|my_upper }} {# 结果AA #}

1.2 自定义标签

前三步同上,这里直接续第四步写代码;

from django import template
register = template.Library() 

@register.simple_tag
def my_multi_tag(v1, v2): 
    return v1 * v2

# 自定义标签扩展之mark_safe
#内置标签safe可以用来关闭转义,从而让标签内容有语法意义,但如果我们想让自定义标签处理的结果也有语法意义,则不能使用内置标签safe了,需要使用mark_safe,可以实现与内置标签safe同样的功能;
from django.utils.safestring import mark_safe

@register.simple_tag
def my_input_tag(id, name):
    res = "<input type='text' id='%s' name='%s' />" % (id, name)
    return mark_safe(res)

使用同过滤器需先load;

使用注意

  1. 自定义的标签及过滤器必须重启Django才生效;

  2. 自定义过滤器只可传两参数,标签可传多个;

二、模板的导入和继承

​ 在实际开发中,模板文件彼此之间可能会有大量冗余代码,为此django提供了专门的语法来解决这个问题,主要围绕三种标签的使用:include标签、extends标签、block标签,使用方法如下;

2.1 模板导入

第一步: 新建一个 xx.html,把好看的模板写入
在这里插入图片描述

第二步: 在你想用的地方导入,语法如下;

# 作用:在一个模板文件中,引入/重用另外一个模板文件的内容,
{% include '模版名称' %}

在这里插入图片描述

效果:
在这里插入图片描述

2.2 模板继承\派生

第一步: 我们需创建一个基本的骨架模板(母版),内部定义多处blocks;

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}
    自定义title名
    {% endblock %}</title>
</head>
<body>
<div>
    {% block div1 %}
        <a href="">1111</a>
        <a href="">2222</a>
        <a href="">3333</a>
        <a href="">4444</a>
    {% endblock %}
</div>
<div>
    {% block div2 %}
    <p>你妈的</p>
    {% endblock %}
</div>
</body>
</html>

extends标签于在一个模板文件中引入/重用另外一个模板文件的内容,include有的功能extends全都有,但是extends可以搭配一个block标签,用于在继承的基础上定制新的内容;

第二步: 新建HTML继承母版,并按照block标记做修改;

{% extends 'index1.html' %}

{% block title %}
sailan
{% endblock %}

{% block div1 %}
    {{ block.super }}  # 该变量会将父模板中div1中原来的内容继承过来,然后可以在此基础上新增,否则就是纯粹地覆盖
    <a href="">5555</a>
    <a href="">6666</a>
{% endblock %}

{% block div2 %}
帅的太自然
{% endblock %}

开机访问,检查元素,替换完成;
在这里插入图片描述

三、静态文件配置

我们在编写模板文件时,需要大量引用css,js,图片等等静态文件,如果我们将这些文件在服务端存放的路径都固定写死的话会不利于后期拓展,解决方案如下;

3.1 单app下静态文件组织与使用

第一步: 找到目录下,settings.py,找到STATIC_URL修改如下;

STATIC_URL = '/static/' # 找到这一行,然后新增下述代码

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'statics'),# 获取静态文件在服务端的绝对路径
]

#STATIC_URL = '/static/'就是为静态文件的绝对路径起了一个别名,以后我们只需要用路径/static/即可

第二步: 在根目录下新增文件夹statics,为了更便于管理,可以在statics下新建子文件夹css、js、img等;
在这里插入图片描述

第三步: 导入;

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

</head>
<body>

方式一
<img src="/static/img/untitled1.jpg" alt="">

方式二
{% load static %}
<img src="{% static 'img/untitled1.jpg' %}" alt="">

方式三
<img src="{% get_static_prefix %}img/untitled1.jpg" alt="">

方式二起别名调用
{% static 'img/untitled1.jpg' as aaa%}
<img src="{{ aaa }}" alt="">

方式三起别名
{% get_static_prefix as bbb %}
<img src="{{ bbb }}img/untitled1.jpg" alt="">
</body>
</html>

3.2 多app下静态文件的组织与使用

待补充

四、inclusion_tag的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,我无法找到关于Django运费模板的具体信息。但是,我可以为您提供一些关于Django模板的基本知识。 Django模板是一种用于生成动态网页的工具。它允许您将静态HTML与动态数据结合在一起,以便在网页上显示动态内容。在Django中,您可以使用模板来呈现数据,并将其与视图函数中的逻辑进行分离。 在Django中,您可以创建一个模板文件,其中包含HTML和模板语言。模板语言允许您在模板中插入动态数据、循环和条件语句等。您可以使用模板标签和过滤器来处理数据并进行逻辑操作。 要使用Django模板,您需要在视图函数中加载模板,并将数据传递给模板进行渲染。然后,您可以将渲染后的模板发送给客户端以显示在浏览器中。 以下是一个简单的示例,演示如何在Django中使用模板: 1. 创建一个模板文件(例如template.html),其中包含HTML和模板语言: ```html <!DOCTYPE html> <html> <head> <title>My Django Template</title> </head> <body> <h1>Welcome to {{ website_name }}</h1> <p>Today's date is {{ current_date }}</p> </body> </html> ``` 2. 在视图函数中加载模板并将数据传递给模板进行渲染: ```python from django.shortcuts import render from datetime import date def my_view(request): website_name = "My Website" current_date = date.today() return render(request, 'template.html', {'website_name': website_name, 'current_date': current_date}) ``` 3. 在urls.py中配置URL与视图函数的映射关系: ```python from django.urls import path from .views import my_view urlpatterns = [ path('my-view/', my_view, name='my-view'), ] ``` 通过访问`http://localhost:8000/my-view/`,您将看到渲染后的模板页面,其中包含动态数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值