django----模板语言

模板概述
1)作为Web框架,Django提供了模板,可以很便利的动态生HTML
2)模版系统致力于表达外观,而不是程序逻辑。
3)模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。
4)模板包含:
o HTML的静态部分
o 动态插入内容部分
5)Django模板语言,简写DTL,定义在django.template包中,由startproject命令生成的settings.py定义关于模板的值:
o DIRS定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件
o APP_DIRS告诉模板引擎是否应该在每个已安装的应用中查找模板,这种便于发布应用
• 常用方式:在项目的根目录下创建templates目录,设置DIRS值
DIRS=[os.path.join(BASE_DIR,"templates")]       注释{# 代码或html #}

模版模板语言运算

Django模版加法:{{ value|add:10}}value=5,则返回15 Django模版减法:

Django模版减法  {{value|add:-10}} value=5,则返回-5,这个比较好理解,减法就是加一个负数

Django模版除法{% widthratio 5 1 100 %}

上面的代码表示:5/1 *100,返回500,widthratio需要三个参数,它会使用 参数1/参数2*参数3,所以要进行乘法的话,就将参数2=1即可

 {% widthratio 5 100 1 %} 前面的代码表示:5/100*1,返回0.05,只需要将第三个参数设置为1即可

注意

当模版引擎遇到点("."),会按照下列顺序查询:
1. 字典查询,例如:foo["bar"]   {{foo.bar}}
2. 属性或方法查询,例如:foo.bar
3. 数字索引查询,例如:foo[bar]  {{all_students.0}}。如果变量不存在, 模版系统将插入'' (空字符串)。在模板中调用方法时不能传递参数

在页面判断登陆

{% if request.user.is_authenticated %}显示登陆界面{% else %}未登录界面{% endif %}
for循环:
{ %for ... in ...%}
循环逻辑
{{forloop.counter}}表示当前是第几次循环
{ %empty%}
给出的列表为或列表不存在时,执行此处
{ %endfor%}
例子:{% for num in b %} b为列表
{{num}}
{%endfor%}<br>
{% for key,value in c.items %}  #c为字典
{{key}}---->{{value}}
{% endfor %}<br>
{% if 条件 %} { %elif ...%}满足条件执行语句{% else %}不满足条件的语句 {% endif %}  
data为html标签可以用{{ data|safe }}防止转义
comment标签,多行注释
{ % comment % }
多行注释
{ % endcomment % }
include:加载模板并以标签内的参数渲染
可以包含另外一个模块过来
{ %include "foo/bar.html" % }

在项目里建立static文件夹然后设置文件夹路径(staticfiles )

然后在前端页面 {% load staticfiles %}导入静态文件(css/js/img)然后修改路径
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
<script src="{% static 'js/jquery.min.js' %}"></script>
from django.contrib.auth.decorators import login_required 引入登陆验证
@login_required(login_url='/user/user_login')用装饰器来进行验证并转到登陆界面

在继承的时候父模板里写

{% block sp9 %}
{{ '我这里可以更改' }}
{% endblock %}
在子模版里
{% extends 'base.html' %}
  {% block sp9 %}
{% endblock %}

继承说明

• 如果在模版中使用extends标签,它必须是模版中的第一个标签
• 不能在一个模版中定义多个相同名字的block标签
• 子模版不必定义全部父模版中的blocks,如果子模版没有定义block,则使用了父模版中的默认值
• 如果发现在模板中大量的复制内容,那就应该把内容移动到父模板中
• 使用可以获取父模板中block的内容
• 为了更好的可读性,可以给endblock标签一个名字

拼接路径 <img src="{{ MEDIA_URL }}{{ article.image }}" width="700px">

---------------------

转载:// https://blog.csdn.net/xiaoming0018/article/details/80389277

原文地址:https://www.cnblogs.com/yanxiaoge/p/9973139.html