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必须是一个字典参数
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标签:特殊符号按照原型进行解析