• django模板系统---3


    1.render_to_string使用:

    ①将一个html模板转换成字符串,可以渲染模板

    from django.template.loader import render_to_string
    
    html = render_to_string('index.html')
    return HttpResponse(html)
    

    2.django中 url 和 path 区别:

    ①版本不同:1.x版本用URL,2.x版本用path

    ②包路径不同:django.urls      path     ; django.conf.urls       ur

    3.render使用:

    ①将html页面转成字符串,然后通过HttpResponse对象方法给浏览器

    render(request,'index.html')
    

    4.模板路径配置:

    ①在setting中配置

    ②'DIRS': [os.path.join(BASE_DIR,'templates')] 表明html模板所在路径

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,'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',
                ],
            },
        },
    ]
    

    ③os.path.join()函数表示将多个路径组合后返回

    31 #合并目录
    32   
    33 >>> import os
    34 >>> os.path.join('/hello/','good/boy/','doiido')
    35 '/hello/good/boy/doiido'
    

    ④'APP_DIRS': True,表示可以如果在指定路径没找到模板,到应用程序中路径下的templates文件夹中去找模板,并且文件夹名称不能变,必须按照django约定的名称,并且应用程序必须在setting中已经安装了

    ⑤查找的顺序:先在DIRS列表中找,没找到如果'APP_DIRS': True,则到该视图所对应的应用程序下templates文件夹中去找模板,并且该应用程序必须在setting中已经安装了,其次去其他应用下templates文件夹中去找

    5.DTL模板语法:

    ①render函数可以传递一些参数,content必须是一个字典参数

    image-20200623144510700

    1.在模板中显示一个变量:{{ xx  }}
    
    2.变量可以通过.来访问其属性:  xx.xx
    后端:class Person(object):
        def __init__(self,username):
            self.username = username
    
    def index(request):
        p = Person("张三")
        context = {
            'person': p
        }
    
        return render(request,'index.html',context=context)
    
    前端:   <body>
            {{ person.username }}
        </body>
        
    3.访问字典: 通过.形式       
    def index(request):
        context = {
            'persons':
                { 'name':123}
               ,
        }
        return render(request,'index.html',context=context)
    
    <body>
        {{ persons.name }}
    </body>
    
    4.访问字典所有键:  注意:属性中不能有和keys同名的键
    <body>
        {{ persons.keys }}
    </body>
    
    5.访问列表:
    <body>
        {{ persons.0 }}
    </body>
    
    
    

    ②总结笔记

    # 模版变量笔记:
    1. 在模版中使用变量,需要将变量放到`{{ 变量 }}`中。
    2. 如果想要访问对象的属性,那么可以通过`对象.属性名`来进行访问。
        ```python
        class Person(object):
            def __init__(self,username):
                self.username = username
    
        context = {
            'person': p
        }
        ```
        以后想要访问`person`的`username`,那么就是通过`person.username`来访问。
    3. 如果想要访问一个字典的key对应的value,那么只能通过`字典.key`的方式进行访问,不能通过`中括号[]`的形式进行访问。
        ```python
        context = {
            'person': {
                'username':'zhiliao'
            }
        }
        ```
        那么以后在模版中访问`username`。就是以下代码`person.username`
    4. 因为在访问字典的`key`时候也是使用`点.`来访问,因此不能在字典中定义字典本身就有的属性名当作`key`,否则字典的那个属性将编程字典中的key了。
        ```python
        context = {
            'person': {
                'username':'zhiliao',
                'keys':'abc'
            }
        }
        ```
        以上因为将`keys`作为`person`这个字典的`key`了。因此以后在模版中访问`person.keys`的时候,返回的不是这个字典的所有key,而是对应的值。
    5. 如果想要访问列表或者元组,那么也是通过`点.`的方式进行访问,不能通过`中括号[]`的形式进行访问。这一点和python中是不一样的。示例代码如下:
        ```python
        {{ persons.1 }}
        ```
    

    5常用标签:

    ①pycharm中关于标签快捷键,输入关键字,按下tab键即可

     1.   {% if age < 18 %}
            <p>您是未成年人,不能进入网吧</p>
        {% elif age == 18 %}
            <p>您是满了18岁,可以进入网吧</p>
        {% else %}
            <p>您已经是成年人了,要承担起家庭的责任了,也不能进入网吧</p>
        {% endif %}
        
    2.{% if '鲁班一号' in heros %}
            <p>鲁班一号正在待命</p>
        {% else %}
            <p>鲁班一号正在睡觉</p>
        {% endif %}  
    
    # if语句笔记:
    1. 所有的标签都是在`{%%}`之间。
    2. if标签有闭合标签。就是`{% endif %}`。
    3. if标签的判断运算符,就跟python中的判断运算符是一样的。`==、!=、<、<=、>、>=、in、not in、is、is not`这些都可以使用。
    4. 还可以使用`elif`以及`else`等标签。
    

    ②for in标签

    1.正序遍历:
    
    2.逆序遍历:
     <ul>
            {% for book in books reversed %}
                <li>{{ book }}</li>
            {% endfor %}
        </ul>
        
    3.遍历字典:
    <ul>
            {% for key,value in person.items %}          #元组
                <li>{{ key }}/{{ value }}</li>
            {% endfor %}
        </ul>
        
    4.forloop.first
    
    

    ③with标签:定义变量

    with变量作用域在with语句块内部

    1.{% with zs=persons.0%}          #不能再=左右两边加空白!
            <p>{{ zs }}</p>
            <p>{{ zs }}</p>
        {% endwith %}
        
    2.{% with persons.0 as zs %}
            <p>{{ zs }}</p>
        {% endwith %}  
        
    

    ④url标签:url反转解析

    urlpatterns = [
        url('', views.index,name='index'),
        url('book/', views.book,name='book'),
        url('movie/', views.movie,name='movie'),
        url('city/', views.city,name='city'),
        url('book1/(?P<year>d)/(?P<month>d)/',views.book_detail,name='detail'),
        url('login/',views.login,name='login')
    ]
    
     <ul class="nav">
            <li><a href="/">首页</a></li>
            <li><a href="{% url 'book' %}">读书</a></li>
            <li><a href="{% url 'movie' %}">电影</a></li>
            <li><a href="{% url 'city' %}">同城</a></li>
            <li><a href="{% url 'detail' year=1 month=1 %}">最火的一篇文章</a></li>
            <li><a href="{% url 'login' %}?next=/">登录</a></li>
        </ul>
    

    ⑤spaceless标签:去除html标签中的空白字符

    ⑥autoescape标签:如果通过视图传递过来的参数中有html代码,就会转义成普通字符串,默认开启

    视图:def index(request):
        context = {
            'info': "<a href='http://www.baidu.com'>百度</a>"
        }
        return render(request,'index.html',context=context)
        
    前端:{% autoescape off %}
            {{ info }}
        {% endautoescape %}
    
    

    ⑦vebatim标签:特殊符号按照原型进行解析

  • 相关阅读:
    QQ恢复解散后的群聊或删除后的好友的方法
    微软双屏手机Surface Duo曝新料
    利用Travis CI+GitHub实现持续集成和自动部署
    利用echarts展示旅行足迹
    03_K近邻算法
    02_感知机算法
    《面试官之你说我听》:简明的图解Redis RDB持久化、AOF持久化
    【绝对有收获】看看?必须告诉你为什么要使用MQ消息中间件(图解版)
    推荐收藏系列:一文理解JVM虚拟机(内存、垃圾回收、性能优化)解决面试中遇到问题(图解版)
    利用window.performance.timing进行性能分析
  • 原文地址:https://www.cnblogs.com/zhuxianxiaofan/p/13184080.html
Copyright © 2020-2023  润新知