模板
- DTL(django templates,language)django内置,完美兼容
- Jinjia2(django支持)
模板用到的函数
render 将模板加载并包装成对象直接返回
def index(request):
#三个参数,第一个必须是request,然后是模板,然后是传递给模板的值(字典)
return render(request,'index.html',context = context)
HttpResponse,就返回一个模板或者字符串
def index(request):
HttpResponse(html)
模板路径
设置模板
- BASE_DIR代表的是项目所在的当前路径
- 'DIRS': [os.path.join(BASE_DIR, 'templates')]
- 'APP_DIRS': True,
APP_DIRS 为True,开始在DIRS下依次查找模板,如果找不到模板,就会检查当前视图的APP是否注册,如果注册,就会去APP下面寻找模板,如果还找不到,就会去其他已经注册的APP中查找模板
要使用APP下的模板,需要将APP在setting注册
模板标签
if
- 和python中的运算一样,有in、not等
{% if age < 18 %}
<p> 未成年</p>
{% elif age == 18 %}
<p> 卡哇伊进入</p>
{% else %}
<p> 成年</p>
{% endif %}
for...in标签
- reversed 反转遍历
- counter0 下标从0开始(默认从0开始)
- recounter0 , 反向输出下标(默认到1)
- forloop 代表循环,first是第一次,last是最后一次
<ul>
{% for hero in heros %}
<li>{{ hero }}</li>
{% endfor %}
</ul>
<td>{{ forloop.counter }}</td>
<td>{{ forloop.counter0 }}</td>
{% if forloop.first %}
<tr style="background: pink;">
{% elif forloop.last %}
tr style="background: red">
{% else %}
<tr>
{% endif %}
- for ...in ..empty
- 当for循环为空的时候执行empty,只要for循环执行过就不会执行empty
{% for comment in comments %}
<li>{{ comment }}</li>
{% empty %}
<li> 没有评论</li>
{% endfor %}
字典
- keys:获取所有的key
- values:获取所有的value
- items:获取的是元祖
{% for key in person.keys %}
<li>{{ key }}</li>
{% endfor %}
url标签
- book就是url的name
<li><a href="{% url 'book' %}">读书</a></li
- 传递一个参数的链接
<li><a href="{% url "detail" book_id = '1' %}">最火的</a></li>
- 登录完毕跳转的链接实现
<li><a href="{% url "login" %}?next=/">登录</a></li>
def login(request):
next = request.GET.get('next')
text = "登录完成跳转的页面{0}".format(next)
return HttpResponse(text)
网友评论