web开发: 给用户提供一个可视化的页面:包含两部分:
django的模板系统完全能够完成上面两个部分的内容
调用一个html页面
def tpltest(request):
html = """
这个是tpltest页面
百度
"""
return HttpResponse(html)
动态数据渲染过程
from django.template import Template,Context
def tpltest(request):
html = """
这个是tpltest页面
姓名:{
{ name }}
百度
"""
## 数据的渲染
name = "laoli"
## 1. 实例化一个template对象
template_obj = Template(html)
##
params = dict(name=name)
## 2. 实例化一个 context实力对象
context_obj = Context(params)
##3. 进行数据渲染
result = template_obj.render(context_obj)
##4. 返回结果
return HttpResponse(result)
以上的方法能够实现动态数据+静态页面,但是代码依然是嵌入到python中,这种方法不使用
将模板单独放在一个文件中,视图进行提供数据,然后进行渲染
在项目的工程目录新建templates目录
settings.py 中配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
### 模板的配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates', ## django模板引擎 jinja2
'DIRS': [os.path.join(BASE_DIR,'templates')], ## 配置模板目录路径
'APP_DIRS': True, ### True 会自动寻找app下面的模板目录,同时 DIRS 可以为空
'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',
],
},
},
]
第一种方法:
返回静态页面
from django.shortcuts import render
def myindex(request):
return render(request,"index.html")
返回静态页面+ 数据
from django.shortcuts import render,render_to_response
def myindex(request):
return render(request,"index.html",{"name":"laowang"})
第二种方法
返回静态页面
from django.shortcuts import render,render_to_response
def myindex2(request):
return render_to_response("index.html")
返回静态页面+ 数据
def myindex2(request):
return render_to_response("index.html",{"name":"index2"})
第三种方式
from django.template.loader import get_template
def myindex3(request):
name = "lisi"
template = get_template("index.html")
result = template.render({
"name":name})
return HttpResponse(result)
回顾:
在模板中如果想要使用后端传入的数据,就要使用模板语法
django中使用变量的语法是 { { name }}
python中数据类型: 整形 string list tuple dict set
def tmptest(request):
# return render(request,"tmptest.html",{"name":"laowang","age":19})
# params = dict(name="lisi",age=19)
# return render(request,"tmptest.html",params)
name = "hello"
age = 10
# params = {"name":name,"age":age}
return render(request,"tmptest.html",locals())
locals() 属于python的方法,作用,将局部变量作为字典返回
<body>
{
{ name }} <br>
{
{ age }} <br>
{
{ hobby }} <br>
{
{ score }} <br>
<h2>列表h2>
<p>
{
{ hobby.0 }}
{
{ hobby.3 }}
{# {
{ hobby[1] }}#}
p>
<h2>字典h2>
<p>
{
{ score }}
{# {
{ score["shuxue"] }}#}
{
{ score.shuxue }}
{
{ score.yuwen }}
p>
变量的使用: python字典,列表,字符串,数字都可以 ,语法 { { key }}
取列表或者字典中的内容 使用 .
django模板语法中,使用if判断,语法结构:
{% if 条件 %}
条件成立执行
{% elif 条件%}
条件成立执行
{% else %}
条件不成立的执行
{% endif %}
<h2>if 判断h2>
{% if age < 18 %}
未成年
{% elif age > 18 %}
成年
{% else %}
在成年的路上
{% endif %}
ifequal 判断两个值是否相等
{% ifequal age 18 %}
成年的路上
{% endifequal %}
{% ifequal age 19 %}
我是19岁
{% endifequal %}
{% ifequal age 17 %}
我是17岁
{% endifequal %}
django 模板中的for循环,语法结构:
{% for one in xxxx%}
{% endfor %}
循环列表
循环列表
{% for one in hobby %}
循环列表 {
{ one }}
{% endfor %}
逆序
{% for one in hobby reversed %}
循环列表 {
{ one }}
{% endfor %}
循环字典
循环字典
{% for key,value in score.items %}
{
{ key }}:{
{ value }}
{% endfor %}
{
% for one in hobby %}
{
% if one == "football" %}
足球
{
% else %}
{
{
one }}
{
% endif %}
{
% endfor %}
forloop是django模板自带的方法,作用是 记录循环的次数
{% for one in hobby %}
{
{ forloop.counter }}:{
{ one }}
{% if forloop.first %}
{
{ one }}
{% elif forloop.last %}
{
{ one }}
{% else %}
{
{ one }}
{% endif %}
{% endfor %}
对后端传入的数据进行二次处理
语法结构: { { 变量 | 过滤器的名字: 参数 }}
提供的过滤器单一,可以自定义过滤器去实现个性化的功能
add 给变量增加值 {
{ age | add:12}}
capfirst 首字母大写 {
{ name | capfirst }}
lower 小写 {
{ name | lower }}
upper 大写 {
{ name | upper }}
default 默认值 {
{ name1 | default:"xxxx" }}
date 对时间进行处理 {
{ now_time | date:"Y-m-d H:i:s" }}
cut 移除指定字符 {
{ name | cut:"l" }}
safe django模板会将后台传入的js或者是html代码,认为是不安全的,然后进行了转义,被safe修饰的内容,执行原有的意思
web开发中,有一个类型的文件叫作 静态文件: css,js,img。静态文件往往不会被直接引用,通过加载页面的时候加载,这部分内容往往是固定的,大部分服务器会将静态文件做单独处理
在项目的工程目录中创建一个static目录,放静态文件
在settings中进行配置
## 静态文件的配置
STATIC_URL = '/static/' ## 静态文件的路由
STATICFILES_DIRS = (
os.path.join(BASE_DIR,"static"), ### 静态文件的路径 地址
)
由 /static/ 代理下面的静态文件的地址
前端使用静态文件:
激活虚拟环境
activate DjangoPath
创建工程
django-admin startproject ArticleBlog
创建templates和static目录
修改settings文件
超链接的跳转路径的配置
在实际的开发中,使用前段写好的页面,有很多重复的代码,为了能够简单操作和便于管理,复用代码,因此可以使用模板继承,
将公共的代码提取出来,作为的父类
调用base.html文件
将index.html 代码放入base.html中,将不是公共的部分删掉
base.html 常用的块
%} {% endifequal % }
静态文件
模板继承
父类模板:
保留下公共的部分,
删除不是公共的部分,补充块
{% block 名字 %} {% endblock %}
子类模板:
继承父类模板
{% extends 父类模板%}
打开相对应的块
{% block 名字%} {%endblock%}