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标签:特殊符号按照原型进行解析

原文地址:https://www.cnblogs.com/zhuxianxiaofan/p/13184080.html