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


    写在前面

    最近看到稀土掘金在搞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添加如下代码:

    html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>TEMPLATE_DEMOtitle>
    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添加如下代码:

    html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>TEMPLATE_DEMOtitle>
    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添加如下代码:

    html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>TEMPLATE_DEMOtitle>
    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添加如下代码:

    html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>TEMPLATE_DEMOtitle>
    head>
    <body>
     <p>variables_demo: {{ name|safe }}p>
    
     <p>过滤器部分例子: {{ name|upper }}p>
    
      <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 = ''
        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党,这突然而来的熟悉感,真的好亲戚,哈哈!


    __EOF__

  • 本文作者: 久曲健的测试窝
  • 本文链接: https://www.cnblogs.com/longronglang/p/17897872.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Java框架-SpringMVC(基础使用+运行流程+拦截器+统一异常处理等详解)
    神奇!这款 Vue 后台框架居然不用手动配置路由
    重装系统后没声音如何解决
    games101——作业7
    React18原理: React核心对象之ReactElement对象和Fiber对象
    成功项目经理总结的20个项目管理经验
    如何将代码以高亮的方式:插入到 word 文件中
    深入理解AVLTree【旋转控制平衡(单旋、双旋)】
    Leetcode 第 365 场周赛题解
    vue 如何获取scope 所在行数,并且动态的给表格中的scope.row赋值scope.$index
  • 原文地址:https://www.cnblogs.com/longronglang/p/17897872.html