zhuxianxiaofan

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

分类:

技术点:

相关文章: