Django学习笔记NO2

模板:

模板用于快速生成动态页面返回给客户端,模板是一个文本,用于分离文档的表现形式和内容。

1.模板的渲染

  • render加载和渲染同时进行:
from django.shortcuts import render

render(request, templatesname, context=None)
# 参数
# request:请求对象,templatesname:模板名称, context:参数字典,必须是字典

2.变量

变量在模板中的表示为:{{变量名}},变量名就是render中context中的键,变量可以是数值、字符串、布尔、也可以是字典、对象、列表等

  • 列表、元组:元素可以使用索引引用,不能使用负索引(变量.索引)
  • 字典:字典变量.key
  • 对象:对象.属性,对象.方法名(方法不能有参数)

3.过滤器

过滤器是在变量显示之前修改它的值的一个方法,过滤器使用管道符,过滤器可以串联调用:{{变量|方法}}
常见的过滤器方法:

  • default:如果该变量不知道或值为None时,显示缺省值{{ li|default:“缺省值” }}
  • default_if_none:如果变量值为None时,显示缺省值;变量不存在就不显示任何值{{value|default_if_none:‘hello’ }}
  • date:格式化日期字符串{{ t1|date:‘Y-d-d H-m-s’ }}
  • 自定义过滤器
# 在app⾥创建⼀个包:templatetags,在包⾥创建⼀个py⽂件 eg:mytag.py
from django import template
# 建立模板对象
register = template.Library() # 实例化自定义过滤器对象
@register.filter(name='sub1') # name代表模板在使用的过滤器的名称
def sun(value): # 参数不能多于两个
    return value - 1
    
# 在模板中使用
{% load mytag %} #加载⾃定义过滤器的模块
<p>
    {{ 5|sub1 }}
</p>
# 显示结果为:4

4.内嵌标签

语法:{% tag %}

4.1 if标签

{% if express1 %}
	# to do
{% elif express2 %}
	# to do
{% else %}
	# to do
{% endif %}

支持的运算符

  • <、>=、 <=、 ==、 !=、 in、 not in、 is、 is not、 not、 and、 or

4.2 for

遍历可迭代对象

{% for x in y %}
 	...
{% endfor %}

# 反向迭代(reversed)
{% for value in c [1,2,3,4,5] reversed %}
	 <span>{{ value }}---</span>
{% endfor %}

# empty 当可迭代对象为空或不存在时执⾏,否则不执⾏
{% for value in c %}
	 <span>{{ value }}---</span>
{% empty %}
	 数据不存在
{% endfor %}

# 字典迭代
# e = {'a1':20,'b1':40}
{% for k,v in e.items %}
	<div>{{ k }}---{{ v }}</div>
{% endfor %}

# 获取for循环迭代的状态
# forloop.parentloop 获取上层的迭代对象
{% for i in c %}
	<li>{{ forloop.first }}</li> # forloop.first 是否为第⼀次迭代
	<li>{{ forloop.last }}</li> # forloop.last 是否为最后⼀次迭代
 	<li>{{ forloop.counter }}</li> # forloop.counter 获取迭代的索引 从1开始
	<li>{{ forloop.counter0 }}</li> # forloop.counter0 获取迭代的索引 从0开始
	<li>{{ forloop.revcounter }}</li> # forloop.revcounter 迭代的索引从最⼤递减到1
 	<li>{{ forloop.revcounter0 }}</li> # forloop.revcounter0 迭代的索引从最⼤递减到0
{% endfor %}

4.3 ifequal/ifnotequal

⽤于判断两个值相等或不等的

{% ifequal var var %}
{% endifequal %}

{% ifnotequal var var %}
{% endifnotequal %}

5、 跨站请求伪造 csrf

防⽌⽹站受第三⽅服务器的恶意攻击(确定表单到底是不是本⽹站的表单传递过来的)。csrf相当于在表达中增加了⼀个隐藏的input框,⽤于向服务器提交⼀个唯⼀的随机字符串⽤于服务器验证表单是否是本服务器的表单。

# 在表单中添加
{% csrf_token %}

局部禁⽤csrf

#在不想检验csrf的视图函数前添加装饰器 @csrf_exempt。
from django.views.decorators.csrf import csrf_exempt,csrf_protect

@csrf_exempt
def csrf1(request):
	pass

6、模板导入标签(include)

可以把指定html文件代码导入到当前文件,实现模板代码的复用。

{% include '路径'/xxx.html' %}

7、url标签

在模板中url标签可用于反向解析

<h2><a href="{% url 'App:index' %}">动态⽣成路由地址不带参的跳转</a></h2>
<h2><a href="{% url 'App:args1' 1 2 %}">动态⽣成路由地址带参的跳转</a></h2>
<h2><a href="{% url 'App:args1' num1=1 num2=2 %}">动态⽣成路由地址带关键字参数的跳转</a></h2>

8、模板继承

模板继承就是先构造一个基础框架模板,而后在其子模版中对它所包含站点的公用部分和定义块进行重载

  • {% extents %} 继承父模板
  • {% block %} 子模版可以重载这个部分
  • {{ block.super }} 调用父模板的代码
    使用继承的常见方式
  • 创建base.html模板,在其中定义站点的主要外观感受。这些都是不常修改甚⾄从不修改的部分。
  • 为每种类型的⻚⾯创建独⽴的模板,例如论坛⻚⾯或者图⽚库。这些模板拓展相应的区域模板.
  • 自己的⻚⾯继承⾃模板,覆盖⽗模板中指定block

9、静态资源配置

  1. 创建static文件夹
  2. 在settings中注册
STATIC_URL = '/static/'
STATICFILES_DIRS = [
	os.path.join(BASE_DIR, 'static'),
]
  1. 在模板中使用静态资源
{% load static %} #放置到模板开头
<img src="/static/img/img.jpeg" alt=""> #硬编码
<img src="{% static 'img/img.jpeg' %}" alt=""> #动态写法,建议⽤这种
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Django时,使用PyCharm作为开发工具可以提高效率。PyCharm是一款功能强大的Python集成开发环境,它提供了丰富的功能和工具,可以帮助开发者更好地编写和调试Django应用程序。 在学习Django的过程中,可以使用PyCharm创建Django项目,并使用其内置的Django支持功能来简化开发过程。PyCharm可以自动识别Django项目的结构,并提供代码补全、语法检查、调试等功能,帮助开发者更快地编写和调试代码。 此外,PyCharm还提供了集成的版本控制系统,如Git,可以方便地管理和追踪代码的变化。它还支持自动化测试和部署,可以帮助开发者更好地进行项目管理和发布。 总之,使用PyCharm作为开发工具可以提高Django学习的效率和便利性。它的强大功能和友好的用户界面使得开发者可以更专注于代码的编写和项目的开发。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *3* [PyCharm平台下初学Django框架](https://blog.csdn.net/howard2005/article/details/93491364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pycharm平台下的Django教程](https://blog.csdn.net/Sunshine_ZCC/article/details/73918408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值