首页 > 其他分享 >Django学习(三) 之 模板中标签的使用

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

时间:2023-12-12 21:35:10浏览次数:35  
标签:name views url demo list Django dict 标签 模板

写在前面

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

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

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

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

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

模板中标签的使用

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

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添加如下代码:

<!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中添加代码如下:

def variables_demo(request):
    name = 'variables_demo'
    return render(request, 'template_demo.html', {'name': name})

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

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添加如下代码:

<!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中添加代码如下:

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

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

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添加如下代码:

<!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中添加代码如下:

def dict_demo(request):
    dict_demo = {'dict': 'dict_demo'}
    return render(request, 'template_demo.html', {'dict': dict_demo})

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

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添加如下代码:

<!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中添加代码如下:

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标签:

基本语法格式如下:

{% if condition %}
     ... display
{% endif %}
# 或者:

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

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

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

{% if athlete_list and coach_list %}
     athletes 和 coaches 变量都是可用的。
{% endif %}

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

{% for athlete in athlete_list %}
    {{ athlete.name }}
{% endfor %}

示例:

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

遍历字典的使用

{% for i,j in views_dict.items %}
{{ i }}---{{ j }}
{% endfor %}

效果如下:

image.png

6、注释标签

Django 注释使用 {# #}。

{# 这是一个注释 #}

写在最后

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

标签:name,views,url,demo,list,Django,dict,标签,模板
From: https://www.cnblogs.com/longronglang/p/17897872.html

相关文章

  • html中的base标签,<base href="http://xxx.com/">什么意思
    HTML中的<base>标签用于指定页面上所有相对URL的基础路径。该标签位于<head>标签内,并具有一个href属性,用于指定基础路径URL。例如:<head><basehref="http://example.com/"/></head>一旦设置了<base>标签,页面上所有使用相对路径的链接、图像、脚本等资源都将以指定的基准U......
  • 实验6 模板类、文件I/O和异常处理
    实验任务4Vector.hpp源代码1#include<iostream>2#include<stdexcept>34template<typenameT>5classVector{6private:7intsize;8T*vec;9public:10Vector<T>()=default;11......
  • chrome弧形标签页实现思路收录
    1. 直线圆角,通过单个伪元素的border-radius产生弧形<template><divclass="tab-list"><divv-for="tabintabs":key="tab.id"class="tab-item":class="activeTab===tab.id?'ac......
  • shell脚本模板-从git拉取代码并打包部署
    source/etc/profile.~/.bash_profile#拉取能耗后端代码cd/usr/local/testmvncleanecho-e"从git华为云拉取后端代码"#首次clonegitpulltest.gitecho-e"从git华为云代码拉取完成"#工程打包echo-e"开始打jar包"mvnpackage-Dmaven.test.skip=true#删除原来的jar包rm......
  • Django 创建项目时找不到数据库sqlite3,提示no changes detected
    原因:PyCharm创建Django项目,找不到数据库sqlite3 解决:如果没有默认的db文件,则应在PyCharm终端中执行以下命令:pythonmanage.pymakemigrations:提示pythonmanage.pymigrate ......
  • django orm 软删除联表查询 需要显示软删除条件
    比如课程学习required_ok=UserLesson.objects.values('uuid').distinct().filter(user_id=self.request.user_id,).filter(lesson__course__course_bx_org__org_id__in=org_ids,).filter(Q(lesson__course__......
  • 如何写简历-学习如何在 2023 年撰写简历所需的所有技巧、工具、模板和示例
    学习如何在2023年撰写简历所需的所有技巧、工具、模板和示例拥有一份经过精心打磨和精心撰写的简历就像在求职过程中拥有超能力一样。 当大多数人走上招聘阶梯时,你却披上了深红色的斗篷,以超音速的速度向上翱翔。本关于如何撰写简历的指南概述了创建此类令人惊叹的简历的最重......
  • 模板模式
    1#include<iostream>2usingnamespacestd;34//PC机,手机,平板5classMakeOrder{6public:7//virtualvoidstartOrder()=0;第一版8//钩子函数的模板方法9virtualvoidstartOrder(){10cout<<"下订单了"<<endl......
  • (来一套)JavaScript并查集模板
    code: classUnionFind{constructor(n){this.parent=Array.from({length:n},(_,i)=>i);this.size=newArray(n).fill(1);this.cnt=n;}findset(x){if(this.parent[x]===x){returnx......
  • php css 改变宽度,img标签设置display:block属性时宽度无法设定为100%的解决办法
    本篇文章所说的内容是img标签设置display:block属性时宽度无法设定为100%的解决办法,方法很详细,有一定的参考价值,有需要的朋友可以参考一下,希望可以对你有所帮助。现象如下代码,img标签设置了display:block,尺寸宽度无法设定为100%img标签设置display:block,宽度无法100%原因替换......