MVT框架中,Model已经完成,View会使用了,接下来是Template-模板。
静态资源
配置文件夹
在与manage.py
同级别的位置新建一个存放静态资源的文件夹
添加映射url
settings.py1 2 3 4 5 6 7 8 9
| """ 省略 """ STATIC_URL = '/static/'
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
|
测试
在static文件夹下新建index.html
,启动项目访问
http://127.0.0.1:8000/static/index.html
若不报错则配置正常。
模板配置
Django中返回页面需要用到渲染:render。
新建目录
与static文件夹同一个目录
配置路径
settings.py1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], + 'DIRS': [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', ], }, }, ]
|
如果使用的是pycharm,强迫症同学可以配置一下模板文件的目录让它变成紫色

coding
在templates下新建一个html文件,
然后:
1 2
| def index(request): return render(request, 'page1.html')
|
添加url映射的部分自行完成
测试
启动项目,若能访问则正常
Django模板语言
Django的模板语言(DTL)可以动态渲染生成html,它的语法请参考 官方文档 这里只做简单的示例。
向模板传递参数
page1.html1 2 3 4 5 6 7 8 9 10
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>page1</title> </head> <body> Hello,{{ admin }}! </body> </html>
|
views.py1 2
| def index(request): return render(request, 'page1.html', {'admin': 'wei'})
|

引用静态资源
这里有两种方式:
- 找一张名为1.png的图片放在static文件夹下
- 编写页面
page1.html1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| {% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>page1</title> </head> <body> Hello,{{ admin }}! <br/>
<img src="/static/1.png" alt="image"/> <br/>
<img src="{% static '1.png' %}" alt="image"/> </body> </html>
|
DTL深入学习
DTL 标签
基本格式:
for循环:
1 2 3 4 5 6 7 8 9 10 11 12
| {% for i in 列表 %} #列表不为空时执行 {% empty %} #列表为空时执行 {% endfor %}
{% for x in 列表 reversed %} {% endfor %}
|
if判断
1 2 3 4 5 6
| {% if %} {% elif %} {% else %} {% endif %}
|
多行注释
1 2
| {% comment %} {% endcomment %}
|
DTL if语句
page1.html1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| {% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>page1</title> </head> <body> Hello,{{ admin }}!<br/> {##} {#<img src="/static/1.png" alt="image"/>#} {#<br/>#} {##} {#<img src="{% static '1.png' %}" alt="image"/>#} {% if age < 18 %} <p>你还没有成年</p> {% elif age == 18 %} <p>你刚刚成年</p> {% else %} <p>你已经成年了</p> {% endif %} </body> </html>
|
``为DTL的注释标记,html源码中不可查看
views.py1 2
| def index(request): return render(request, 'page1.html', {'admin': 'wei', 'age': int(request.GET.get('age'))})
|

DTL 继承
模板里编写{% block <demo> %}
开头,{% endblock %}
结尾处,代表可以被继承.
父模板:
father.html1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% block demo %} <h1>模板1</h1> {% endblock %}
{% block demo1 %} <h1>模板2</h1> {% endblock %}
</body> </html>
|
子模板
son,html1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% extends 'father.html' %} {# 继承模板 #}
{% block demo %} {# 对引入的模板块进行从写 #} <h1>这里是重写</h1> {% endblock %} </body> </html>
|
1 2
| def index(request): return render(request, 'son.html')
|
