Django学习(三) 之 模板中标签的使用

写在前面

最近看到稀土掘金在搞2023年终总结征文活动 ,一直想尝试投稿试试,周末我就花了近一下午时间写完初稿,然后周一、周二完成精读再改稿,感觉OK,昨晚凌晨第一时间在稀土掘金投稿。

结果,又发生了同样的事情。

同样的文章,在博客园上、公号上阅读量很OK,在稀土掘金上就上不来。

这应该是我博客园第四次上榜一了把,也是是第二次找到运营大大了,我都有点不好意思了,我好不容易鼓起勇气想投个稿,结果尴尬,不过后来运营大大也帮忙上推荐了,但是值得一说的是吗,这个掘金阅读量上不来,是我写的不行吗?回头我好好总结下,做个复盘。

先不想了,还是接着更文吧。

模板中标签的使用

DjangoMVC思想,模板是一个文本,用于分离文档的表现形式和内容,而不是将数据与视图混合在一起 先创建静态文件,在mycontent/templates/下创建template_demo.html,暂时先不修改如内容,在django_project/settings.py,修改为如下代码:

python 复制代码
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR+"/mycontent/templates",],   # 默认为[]
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

1、模板标签变量的使用

template_demo.html添加如下代码:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TEMPLATE_DEMO</title>
</head>
<body>
 <p>variables_demo: {{ name }}</p>
</body>
</html>

mycontent/views.py中添加代码如下:

python 复制代码
def variables_demo(request):
    name = 'variables_demo'
    return render(request, 'template_demo.html', {'name': name})

django_project/urls.py中添加代码如下:

python 复制代码
urlpatterns = [
    path("index/", views.index),
    re_path('^$', views.index),
    url('^$', views.index),
    url('^my_content/$', views.my_content),
    url('^my_content/page=(\d+)$', views.pagehelper),
    url('variables_demo/', views.variables_demo)
]

效果如下:

2、模板标签列表的使用

template_demo.html添加如下代码:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TEMPLATE_DEMO</title>
</head>
<body>
 <p>variables_demo: {{ name }}</p>
 <p>list_demo: {{ list }}</p>
</body>
</html>

mycontent/views.py中添加代码如下:

python 复制代码
def list_demo(request):
    list = ['list1','list2','list3']
    return render(request, 'template_demo.html', {'list': list})

django_project/urls.py中添加代码如下:

python 复制代码
urlpatterns = [
    path("index/", views.index),
    re_path('^$', views.index),
    url('^$', views.index),
    url('^my_content/$', views.my_content),
    url('^my_content/page=(\d+)$', views.pagehelper),
    url('variables_demo/', views.variables_demo),
    url('list_demo/', views.list_demo)
]

效果如下:

3、模板标签字典的使用

template_demo.html添加如下代码:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TEMPLATE_DEMO</title>
</head>
<body>
 <p>variables_demo: {{ name }}</p>
 <p>list_demo: {{ list }}</p>
 <p>dict_demo: {{ dict }}</p>
</body>
</html>

mycontent/views.py中添加代码如下:

python 复制代码
def dict_demo(request):
    dict_demo = {'dict': 'dict_demo'}
    return render(request, 'template_demo.html', {'dict': dict_demo})

django_project/urls.py中添加代码如下:

python 复制代码
urlpatterns = [
    path("index/", views.index),
    re_path('^$', views.index),
    url('^$', views.index),
    url('^my_content/$', views.my_content),
    url('^my_content/page=(\d+)$', views.pagehelper),
    url('variables_demo/', views.variables_demo),
    url('list_demo/', views.list_demo),
    url('dict_demo/', views.dict_demo),
]

效果如下:

知识点:

变量模板语法:

  • view:{"HTML变量名" : "views变量名"}
  • HTML:{{变量名}}

4、模板的一些特殊栗子

template_demo.html添加如下代码:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TEMPLATE_DEMO</title>
</head>
<body>
 <p>variables_demo: {{ name|safe }}</p>
<!-- 过滤器部分例子-->
 <p>过滤器部分例子: {{ name|upper }}</p>
<!-- length例子-->
  <p>length例子: {{ name|length }}</p>
 <!-- 截断的字符串将以 ... 结尾。-->
 <p>截断的字符串将以 ... 结尾: {{ name|truncatechars:2}}</p>
 <p>list_demo: {{ list }}</p>
 <p>list_demo: {{ list|first|upper }}</p>
 <p>dict_demo: {{ dict }}</p>


</body>
</html>

mycontent/views.py中添加代码如下:

python 复制代码
def variables_demo(request):
    name = '<script>alert("safe test!")</script>'
    return render(request, 'template_demo.html', {'name': name})

效果如下:

知识点:

{{ views_str|safe }}:将字符串标记为安全,不需要转义,要保证 views.py 传过来的数据绝对安全,才能用 safe

5、if/else、for标签、遍历字典的使用

if/else标签:

基本语法格式如下:

python 复制代码
{% if condition %}
     ... display
{% endif %}
# 或者:

{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

根据条件判断是否输出。if/else 支持嵌套。

{% if %} 标签接受 and or或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ),例如:

python 复制代码
{% if athlete_list and coach_list %}
     athletes 和 coaches 变量都是可用的。
{% endif %}

for 标签使用: 基本语法格式如下:

python 复制代码
{% for athlete in athlete_list %}
    {{ athlete.name }}
{% endfor %}

示例:

html 复制代码
<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

遍历字典的使用

python 复制代码
{% for i,j in views_dict.items %}
{{ i }}---{{ j }}
{% endfor %}

效果如下:

6、注释标签

Django 注释使用 {# #}。

bash 复制代码
{# 这是一个注释 #}

写在最后

感觉有点像Java中的httljsp都有点像呢,马上熟悉感就来了,作为一个Java党,这突然而来的熟悉感,真的好亲戚,哈哈!

相关推荐
程序猿-瑞瑞7 分钟前
24 go语言(golang) - gorm框架安装及使用案例详解
开发语言·后端·golang·gorm
组合缺一10 分钟前
Solon v3.0.5 发布!(Spring 可以退休了吗?)
java·后端·spring·solon
猿来入此小猿14 分钟前
基于SpringBoot在线音乐系统平台功能实现十二
java·spring boot·后端·毕业设计·音乐系统·音乐平台·毕业源码
愤怒的代码28 分钟前
Spring Boot对访问密钥加解密——HMAC-SHA256
java·spring boot·后端
栗豆包44 分钟前
w118共享汽车管理系统
java·spring boot·后端·spring·tomcat·maven
万亿少女的梦1681 小时前
基于Spring Boot的网络购物商城的设计与实现
java·spring boot·后端
开心工作室_kaic2 小时前
springboot485基于springboot的宠物健康顾问系统(论文+源码)_kaic
spring boot·后端·宠物
0zxm3 小时前
08 Django - Django媒体文件&静态文件&文件上传
数据库·后端·python·django·sqlite
刘大辉在路上10 小时前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
追逐时光者12 小时前
免费、简单、直观的数据库设计工具和 SQL 生成器
后端·mysql