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