自定义过滤器和标签 & 静态文件相关

自定义过滤器和标签

  1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.

  2、在app中创建templatetags模块(模块名只能是templatetags)

  3、创建任意 .py 文件,如:my_tags.py

from django import template
from django.utils.safestring import mark_safe

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

@register.filter # 自定义过滤器最多只有两个参数
def filter_multi(v1,v2):
    return  v1 * v2

@register.simple_tag  #和自定义filter类似,只不过接收更灵活的参数,没有个数限制。
def simple_tag_multi(v1,v2):
    return  v1 * v2

@register.simple_tag
def my_input(id,arg):
    result = "<input type=‘text‘ id=‘%s‘ class=‘%s‘ />" %(id,arg,)
    return mark_safe(result)

4、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py

{% load my_tags %}

5、使用simple_tag和filter(如何调用)

{% load xxx %}  

# num=12
{{ num|filter_multi:2 }} #24

{{ num|filter_multi:"[22,333,4444]" }}

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

注意:filter可以用在if、for等语句后,simple_tag不可以

{% if num|filter_multi:30 > 100 %}
    {{ num|filter_multi:30 }}
{% endif %}

inclusion_tag

多用于返回html代码片段

示例:

在templatetags文件夹中创建一个py文件my_inclusion.py

@register.inclusion_tag(‘inclusiontag.html‘) # 将对应的html里面的内容用下面函数的返回值渲染,然后作为一个组件一样,加载到使用这个函数的html文件里面
def func(v1): # 参数可以传多个进来

    return {‘oo‘:v1}# 这里可以穿多个值,和render的感觉是一样的

my_inclusion.py对应的html文件中写入逻辑

<!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">
  <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
  <title>Bootstrap 101 Template</title>
  <!-- Bootstrap -->
</head>
<body>

<ul>
  {% for d in oo %}
    <li>{{ d }}</li>
  {% endfor %}

</ul>

</body>
</html>

views对应的html文件

<!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">
  <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
  <title>Bootstrap 101 Template</title>
  <!-- Bootstrap -->
</head>
<body>

{% func l1 %}

</body>
</html>

静态文件相关

js、css、img等都叫做静态文件,那么关于django中静态文件的配置,我们就需要在settings配置文件里面写上这写内容:

# STATIC_URL = ‘/xxx/‘ #别名,随便写名字,但是如果你改名字,别忘了前面页面里面如果你是通过/xxx/bootstrap.css的时候,如果这里的别名你改成了/static/的话,你前端页面的路径要改成/static/bootstrap.css。所以我们都是用下面的load static的方式来使用静态文件路径
STATIC_URL = ‘/static/‘ #别名

STATICFILES_DIRS = [
    os.path.join(BASE_DIR,‘jingtaiwenjian‘), #注意别忘了写逗号,第二个参数就是项目中你存放静态文件的文件夹名称
]

目录:别名也是一种安全机制,浏览器上通过调试台你能够看到的是别名的名字,这样别人就不能知道你静态文件夹的名字了,不然别人就能通过这个文件夹路径进行攻击。

在html页面中可以通过别名+css文件的方式引入css文件,别名相当于映射css静态文件地址

前端页面引入静态文件的写法,因为别名也可能会修改,所以使用路径的时候通过load static来找到别名,通过别名映射路径的方式来获取静态文件

{% static %}

图片静态文件时

{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

引用JS文件时使用:

{% load static %}
<script src="{% static "mytest.js" %}"></script>

某个文件多处被用到可以存为一个变量

{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}"></img>

{% get_static_prefix %}

相当于{% static %}相同的用法,取决于个人喜好,两者也可以同时使用

{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />

或者

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />

注意一个html文件中写相对路径时需要注意的一个问题:

例子:
<form action="/login/"></form>
<img src="/static/1.jpg" alt="">
等标签需要写路径的地方,如果写的是相对路径,那么前置的/这个斜杠必须写上,不然这个请求会拼接当前网页的路径来发送请求,就不能匹配我们的后端路径了

原文地址:https://www.cnblogs.com/5kuishoua666/p/11210428.html

时间: 2024-10-31 23:46:37

自定义过滤器和标签 & 静态文件相关的相关文章

Django中的tags,母版和继承,组件,静态文件相关,自定义simpletag和自定义inclusion_tag

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开始) forloop.rev

Django入门--自定义过滤器与标签

为了让Django找到自定义的模板过滤器和模板标签,需要进行文件路径配置,配置方式分为APP目录下配置和项目路径下配置两种方式: 1.在APP目录下配置:针对某个应用特定的自定义 第一步:在APP目录下创建"templatetags"文件夹: 第二步:在"templatetags"文件夹下创建python模块(py文件) 2.在项目目录下配置:针对所有应用的自定义 第一步:在项目目录下创建一个新的app,例如"common"文件夹 第二步:在项目

一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)

一.变量 ''' 1.视图函数可以通过两种方式将变量传递给模板页面 -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量keyn': '变量值n'}) -- render(request, 'test_page.html', locals()) # locals() 就是将视图函数中的所有变量都传递给模板页面 2.模板页面中对变量的使用 def dtl(request): num = 3.14 ss = '大碗宽面' #

django自定义过滤器和标签

1.自定义过滤器和标签的流程: 1.在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为app01的app下创建了一个templatetags的包,并在该包下创建了一个名为my_tags的文件 2.settings文件中的INSTALLD_APPS内必须含有该app.接下来,我们需要确认settings文件中的INSTALLED_APPS变量中已经有了app01 INSTALLED_APPS = [ 'django.contrib.admin', 'dja

Django模板语言-(母板、组件、静态文件相关、simple_tag、inclusion_tag)

母板 母版的写法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=devi

65 组件 静态文件相关 视图

主要内容:https://www.cnblogs.com/maple-shaw/articles/9285269.html 1 组件 a : 定义:可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可 b : 语法:  {% include '组件名'%} 2 静态文件相关: a : 语法: {% load static %} {% load static %} <link href="{% static 'bootstrap-3.3.7/

django 组件 自定义标签 静态文件配置

组件 将一些功能标签写在一个html文件里,这个文件作为一个组件,如果那个文件需要就直接拿过来使用即可: 这是title.html文件,写了一个导航栏,作为一个公用的组件 <div style="background-color: cyan;width: 100%;height: 40px;"> <span style="font-size: 20px;">首页</span> <span style="font-s

django自定义过滤器及标签的布置

1:在app文件下新建templatetags,文件名不可改,django运行时会自动寻址. 2:templatetags下新建py文件. 3:py文件里需要引用申明:from django import template // 引入模板 from django.utils.safestring import mark_safe //此句与mark_safe函数有关,使用不到可略去 register=template.Library() // 注册 4:py文件里定义函数体:def...(x,y

Django之模板层-自定义过滤器以及标签

自定义标签与过滤器 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 在app中创建templatetags模块(模块名只能是templatetags) 创建任意 .py 文件,如:my_tags.py from django import template # 该对象名必须是register register = template.Library() #自定义过滤器装饰器 @register.filter def mult