首页 > 其他分享 >Django 模版变量

Django 模版变量

时间:2024-02-13 18:33:06浏览次数:19  
标签:forloop 变量 迭代 模版 Django 标签 过滤器

Django 模版变量

Django 模版语言的语法主要分为以下四个部分:

  • 变量
  • 标签
  • 过滤器
  • 注释

一、模版变量

1)变量的命名规范

Django对于模版变量的命名规范没有太多的要求,可以使用任何字母、数字和下划线的组合来命名,且必须以字母或下划线开头,但是变量名称中不能有空格或者标点符号。

2)模版的变量语法

四种不同的使用场景,分别如下:

  • 索引index查询,如{{变量名.index}},其中index为int类型即索引下标;
  • 字典查询方法,{{变量名.key}}其中key代表字典的键;
  • 属性或者方法查询,如{{对象.方法/属性}}
  • 函数调用

在views.py文件里:

def test1_html(request):
    a = {}
    a['name'] = '我的网站'
    a['course'] = ['python','java','c++']
    a['b'] = {'name':'我的网站','address':'http://c.biancheng.net/'}
    a['test_hello'] = test_hello
    a['class_obj'] = Website()
    return render(request,'test.html',a)
def test_hello():
    return "欢迎进入网站首页"
class Website:
    def web_name(self):
        return 'hello,我的网站'

在test.html模版内:

	<p> 网站名字是{{ name }}</p>
    <p> 课程包含{{ course.1 }}</p>
    <p> 变量a是{{ b }}  <p>
    <p> a['address']是{{b.address}}  </p>
    <p> 函数fuction:{{ test_hello }}</p>
    <p> 类实例化对象:{{class_obj.web_name}} </p>

3)模版传参语法格式

在视图函数中必须将变量封装到字典中才允许传递到模版上。

#方式1
def xxx_view(request)
    dic = {
        "变量1":"值1",
        "变量2":"值2",
    }
    return render(request, 'xxx.html', dic)
#方式2
def xxx_view(request)
        变量1=值1
        变量2=值2
    return render(request, 'xxx.html', locals())

提示:local()返回当前函数作用域内全部局部变量形成的字典,即将变量与值对应形成字典,并把这个字典作为locals()的返回值来使用。

二、标签讲解

1、if标签

Django的模版系统对标签的解释是在渲染的过程中提供相应的逻辑。语法如下:

{% if 条件表达式 %}
......
{% endif %}

注意:if标签结尾需要使用endif最为结尾。

2、for标签

for标签使用时也需要和endfor标签配合使用,但是多了一个可选的empty标签,比如用它来显示当列表不存在或者列表中元素为空的时候要显示的内容

2.1、forloop变量详解

在for标签还提供了内置变量forloop,我们可以访问这个变量的属性从而获取for循环迭代过程中的一些信息。forloop的属性主要有以下几个:

变量 描述
forloop.counter 用来计数,查看当前迭代第几个元素(从1开始索引)
forloop.counter0 用来计数,查看当前迭代第几个元素(从0开始索引)
forloop.revcounter 表示当前循环中剩余的未被迭代的元素数量(从1开始索引)
forloop.revcounter0 表示当前循环中剩余的未被迭代的元素数量(从0开始索引)
forloop.first 如果当前迭代的是第一个元素,则为True
forloop.last 如果当前迭代的是最后一个元素,则为True
forloop.parentloop 在嵌套循环中,用来引用外层循环的 forloop

三、过滤器用法讲解

1、过滤器语法格式

过滤器作用是在变量输出时,对输出的变量值做进一步的处理。

过滤器跟模版标签一样,也是在模版中对函数进行调用。有内置过滤器,也可以自己定义过滤器,过滤器的语法格式如下:

{{ 变量 | 过滤器1:参数值1 | 过滤器2:参数值2 ... }}
过滤器 使用说明。
length 获取变量的长度,适用于字符串和列表。
lower/upper 转换字符串为小写/大写形式。
first/last 获取变量的首个/末尾元素。
add:'n' 给变量值增加 n。
safe 默认不对变量内的字符串进行html转义。
cut 从给定的字符串中删除指定的值。
dictsort 获取字典列表,并返回按参数中给定键排序的列表。
join 用字符串连接列表,例如 Python 的 str.join(list)。
truncatewords 如果字符串字符多于指定的字符数量,那么会被截断。 截断的字符串将以可翻译的省略号序列(“...”)结尾。

2、过滤器的实际应用

过滤器相比模版标签要简单的多,可以将其比作成python函数,传递参数给他处理就可以。当过滤器接收参数后对它进行处理,最终将处理结果返回到模版中,这就是整个过滤器的实现流程。

标签:forloop,变量,迭代,模版,Django,标签,过滤器
From: https://www.cnblogs.com/wjx-2005-07-01/p/18014699

相关文章

  • 三十五、Django实践的笔记
    Django时间时区datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S'),得到的是标准时区的时间字符串https://blog.csdn.net/qiaominghe/article/details/86593744https://blog.csdn.net/qq_42778001/article/details/111088130https://zhuanlan.zhihu.com/p/24246164fro......
  • Go语言精进之路读书笔记第20条——在init函数中检查包级变量的初始状态
    20.1认识init函数init函数的特点:运行时调用,Go程序中不能显式调用顺序执行,等待一个init函数执行完毕并返回后再执行下一个init函数在整个Go程序生命周期内仅会被执行一次先被传递给Go编译器的源文件中的init函数先被执行,同一个源文件中的多个init函数按声明顺序依次执行。但......
  • 12.Jenkins节点环境变量
    Jenkins节点环境变量定义 Jenkins在构建的时候,如果使用节点构建可能存在一些个性化环境变量,此时需要在节点中单独管理节点环境变量配置 节点工具配置节点环境变量配置节点工具配置 节点工具的使用顺序节点工具>全局工具节点工具配置方式先配置全......
  • 10.Jenkins环境变量
    Jenkins环境变量 Jenkins环境变量就是通过env关键字暴露出来的全局变量,可以在Jenkins文件的任何位置使用环境变量分类 系统内置环境变量用户自定义环境变量常用内置环境变量 BUILD_NUMBERBUILD_URLJOB_NAMEGIT_URL用户自定义环境变量新增......
  • python3.9 + django4.1 + vue3 ,报错,无法访问配置的路由地址,Using the URLconf defined
    python3.9+django4.1+vue3,报错,无法访问配置的路由地址,UsingtheURLconfdefinedinStudentMgrBE.urls,DjangotriedtheseURLpatterns,inthisorder:-------------------------------------------------------------------------------无法访问 地址,报错如下: Us......
  • 二十三、Django之Form组件
    Django的Form:1、对用户请求的验证2、生成HTML代码a、创建一个类b、类中创建字段(包含正则表达式)c、Geta)Obj=Fr()obj.user=>自动生成HTMLd、POSTa)Obj=Fr(request,POST)i.Ifobj.is_valid():Obj.cleaned_dataElse:......
  • 二十四、Django Serializes
    SerializersDjango中,自定义类型的对象无法通过json序列化,可以使用serializers。defget_data(request):#由于UserInfo是自定义对象,不能通过json序列化#因此使用以下方式fromdjango.coreimportserializersret={'status':True,'data':None}try:......
  • 十八、Django之Http
    1、Django请求的生命周期请求响应Http1、发送Http请求请求头(包含Cookie)\r\n\r\n请求体2、服务器请求,根据请求头中的url在路由关系表中进行匹配(从上到下)3、匹配成功后,执行指定的views函数a.Url->函数==>FBVb.Url->类==>CBV4、响应内......
  • 十六、Django的ORM(二)
    1、DecimalFieldDecimalField保存浮点型数据比FloatField精确,因为它是以字符串来保存,而FloatField,数据越长,保存得越不精确。2、索引(命中索引)正确使用SQL语言,使查找数据时,用到索引username=models.CharField(...#db_index=True数据库中字段是否可以建立......
  • 十五、Django的ORM
    单表操作1、表记录的添加方式一:Book()+obj.save()b=Book(name="python基础",price=99,author="yuan",pub_date="2017-12-12")b.save()#将b存到数据库方式二:createBook.objects.create(name="linux",price=78,author="HK",pub_date="......