经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django学习(三) 之 模板中标签的使用
来源:cnblogs  作者:久曲健  时间:2023/12/13 9:10:00  对本文有异议

写在前面

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

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

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

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

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

模板中标签的使用

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

  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. 'DIRS': [BASE_DIR+"/mycontent/templates",], # 默认为[]
  5. 'APP_DIRS': True,
  6. 'OPTIONS': {
  7. 'context_processors': [
  8. 'django.template.context_processors.debug',
  9. 'django.template.context_processors.request',
  10. 'django.contrib.auth.context_processors.auth',
  11. 'django.contrib.messages.context_processors.messages',
  12. ],
  13. },
  14. },
  15. ]

1、模板标签变量的使用

template_demo.html添加如下代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>TEMPLATE_DEMO</title>
  6. </head>
  7. <body>
  8. <p>variables_demo: {{ name }}</p>
  9. </body>
  10. </html>

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

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

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

  1. urlpatterns = [
  2. path("index/", views.index),
  3. re_path('^$', views.index),
  4. url('^$', views.index),
  5. url('^my_content/$', views.my_content),
  6. url('^my_content/page=(\d+)$', views.pagehelper),
  7. url('variables_demo/', views.variables_demo)
  8. ]

效果如下:

2、模板标签列表的使用

template_demo.html添加如下代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>TEMPLATE_DEMO</title>
  6. </head>
  7. <body>
  8. <p>variables_demo: {{ name }}</p>
  9. <p>list_demo: {{ list }}</p>
  10. </body>
  11. </html>

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

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

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

  1. urlpatterns = [
  2. path("index/", views.index),
  3. re_path('^$', views.index),
  4. url('^$', views.index),
  5. url('^my_content/$', views.my_content),
  6. url('^my_content/page=(\d+)$', views.pagehelper),
  7. url('variables_demo/', views.variables_demo),
  8. url('list_demo/', views.list_demo)
  9. ]

效果如下:

3、模板标签字典的使用

template_demo.html添加如下代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>TEMPLATE_DEMO</title>
  6. </head>
  7. <body>
  8. <p>variables_demo: {{ name }}</p>
  9. <p>list_demo: {{ list }}</p>
  10. <p>dict_demo: {{ dict }}</p>
  11. </body>
  12. </html>

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

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

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

  1. urlpatterns = [
  2. path("index/", views.index),
  3. re_path('^$', views.index),
  4. url('^$', views.index),
  5. url('^my_content/$', views.my_content),
  6. url('^my_content/page=(\d+)$', views.pagehelper),
  7. url('variables_demo/', views.variables_demo),
  8. url('list_demo/', views.list_demo),
  9. url('dict_demo/', views.dict_demo),
  10. ]

效果如下:

知识点:

变量模板语法:

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

4、模板的一些特殊栗子

template_demo.html添加如下代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>TEMPLATE_DEMO</title>
  6. </head>
  7. <body>
  8. <p>variables_demo: {{ name|safe }}</p>
  9. <!-- 过滤器部分例子-->
  10. <p>过滤器部分例子: {{ name|upper }}</p>
  11. <!-- length例子-->
  12. <p>length例子: {{ name|length }}</p>
  13. <!-- 截断的字符串将以 ... 结尾。-->
  14. <p>截断的字符串将以 ... 结尾: {{ name|truncatechars:2}}</p>
  15. <p>list_demo: {{ list }}</p>
  16. <p>list_demo: {{ list|first|upper }}</p>
  17. <p>dict_demo: {{ dict }}</p>
  18. </body>
  19. </html>

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

  1. def variables_demo(request):
  2. name = '<script>alert("safe test!")</script>'
  3. return render(request, 'template_demo.html', {'name': name})

效果如下:

知识点:

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

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

if/else标签:

基本语法格式如下:

  1. {% if condition %}
  2. ... display
  3. {% endif %}
  4. # 或者:
  5. {% if condition1 %}
  6. ... display 1
  7. {% elif condition2 %}
  8. ... display 2
  9. {% else %}
  10. ... display 3
  11. {% endif %}

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

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

  1. {% if athlete_list and coach_list %}
  2. athletes coaches 变量都是可用的。
  3. {% endif %}

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

  1. {% for athlete in athlete_list %}
  2. {{ athlete.name }}
  3. {% endfor %}

示例:

  1. <ul>
  2. {% for athlete in athlete_list %}
  3. <li>{{ athlete.name }}</li>
  4. {% endfor %}
  5. </ul>

遍历字典的使用

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

效果如下:

image.png

6、注释标签

Django 注释使用 {# #}。

  1. {# 这是一个注释 #}

写在最后

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

原文链接:https://www.cnblogs.com/longronglang/p/17897872.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号