在Django的模板语言中,通过使用 过滤器 来改变变量的显示。(注:过滤器是函数)
过滤器的语法: {{ 变量名|过滤器名称:参数 }}
使用管道符"|"来应用过滤器。管道符两侧无空格
常见的几种过滤器:
如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。
*日期格式化过滤器 *
格式:
{{ value|date:"Y-m-d H:i:s"}}
Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。
移除value中所有的与给出的变量相同的字符串
格式:
{{ value|cut:' ' }}
如果value为’i love you’,那么将输出’iloveyou’.
使用拼接符连接列表,例如Python的str.join(list)
格式:
{{value|join:”_”}}
使用Django中的标签可以在模板中做一些简单的逻辑判断。
标签和{%%}配合使用。
格式:
{%for 临时遍历 in 序列%} … {%endfor%}
for循环可用的一些参数:
Variable | Description |
---|---|
forloop.counter | 当前循环的索引值(从1开始) |
forloop.counter0 | 当前循环的索引值(从0开始) |
forloop.revcounter | 当前循环的倒序索引值(从1开始) |
forloop.revcounter0 | 当前循环的倒序索引值(从0开始) |
forloop.first | 当前循环是不是第一次循环(布尔值) |
forloop.last | 当前循环是不是最后一次循环(布尔值) |
如果变量名不存在或者内容为空的时候显示{%empty%}中的内容,否则不执行。
格式:
{% for game in games %}
...
{% empty %}
...
{% endfor %}
格式:
{% if 判断条件 %}
...
{% endif %}
注: if 语句支持 and、or、==、<、>、!=、<=,>=,in、not in、is、is not判断。
格式:
{% if name_length|length > 6 %}
...
{% else %}
...
{% endif %}
格式:
{% if name_length|length > 6 %}
...
{% elif age == 20 %}
...
{% else %}
...
{% endif %}
当我们想在页面上使用一些静态资源例如图片、js、css 。这时候我们就要使用到static标签了。
例如在页面中显示一张本地图片。
操作步骤:
a. 新建一个文件夹来盛放静态资源,例如 static,为了和后面的static标签区分,这里使用 statics名称。
b. 将statics文件夹加载到python搜索路径中。
c. 在页面上最开始位置使用 {% load static %}即 load 标签来加载 static 标签。
d. 在要展示图片的地方 使用 {% static ‘图片路径’}
{% static ‘图片路径’} 表示使用
注:如果不想在每一个页面中都使用 {%load static %} ,可在settings.py中进行如下配置
如果当我们浏览一个网站的时候发现里面的网页大部分都是相同的,这就说明这个网页的代码的可复用性很高,我们可以将这些重复部分的代码单独拿出来做成一个模板,而在每次想要实现相同功能的网页样式时都将这个模板进行套用,从而进行快速的页面开发。
例如某图书管理系统:
将网页中内容与样式均相同的代码提取出来,单独存放在一个文件中,通常我们将它命名为’base’。
在代码块不相同的地方使用
{% block ‘自定义名称’%}
{%endblock%}
在将要对模板功能进行扩展的网页代码前加上继承语句,指明继承了哪个模板。
语法:
{% extends 'base.html' %}
可以将常用的页面内容如导航条,页尾信息等不变的组件可以保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。
urlpatterns = [
path( 要匹配的路径(可以是正则表达式), 视图函数, 参数, 别名)
]
(1) 正则表达式:一个正则表达式字符串
(2) 视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
(3) 参数:要传递给视图函数的默认参数(字典形式,可选)
(4) 别名:一个可选的name参数
(1) 在python中使用 ‘re_path’模块来写正则表达式
先引入,from django.urls import re_path
(2) 正则表达式的开始使用“^”表示。
(3) 正则表达式的结束使用“$”表示。
(4) “r” 为元字符串 防止正则表达式中的转义。
正则表达式分组匹配是通过小括号”()”来捕获URL中的值并以位置参数形式传递给视图。
分组命名正则表达式组的语法是
`(?Ppattern)`,
其中name是组的名称,pattern是要匹配的模式。如[0-9][a-zA-Z]
捕获的值作为关键字参数而不是位置参数传递给视图函数。
在视图中指定默认值,可以在不输入具体的URL时,执行默认的值。
指定的值一定是字符串类型
使用url反向代理,解决硬编码问题。
硬编码:硬编码数据通常只能通过编辑源代码和重新编译可执行文件来修改,尽管可以使用调试器或十六进制编辑器在内存或磁盘上进行更改。 硬编码的数据通常表示不变的信息,例如物理常量,版本号和静态文本元素。 另一方面,软编码数据对用户输入,HTTP服务器响应或配置文件等任意信息进行编码,并在运行时确定。
不使用反向代理:
浏览器访问index9,返回index9页面,点击超链接访问index10页面。
使用反向代理: