Python全栈 Web(Django框架、模板)

1.Django中的模板(Templates)

1.什么是模板

模板就是要动态呈现给用户的网页

模板的本质就是网页- 前后端,动静结合的网页

Django的模板引擎是由Django自己提供的,并不是Jinja2,

                所以Django的模板语法与Flask(Jinja2)的语法会有一些不同


2.模板的设置

在 settings.py 中 有一个 TEMPLATES 变量

1.BACKEND:指定使用的模板的引擎

2.DIRS :指定模板的存放目录们

1.如果写东西:则按照写好的路径去找模板

2.如果未写东西:那么Django会自动的到每个应用中所有一个叫templates的目录来作为模板的存放目录

3.APP_DIRS : 是否自动搜索应用中的目录

True:表示搜索应用中的 templates 的目录


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

# 静态文件的访问路径
STATIC_URL = '/static/'
# 静态文件的存储路径
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)


1.通过 loader 对象获取模板,再通过HttpResponse进行响应

from django.template import loader

def xxViews(request):

#1.通过 loader 加载模板

t = loader.get_template("模板名称")

#2.将模板渲染成字符串

html = t.render()

#3.将字符串通过HttpResponse响应给客户端

return HttpResponse(html)

2.使用 render 直接加载并响应模板

def xxViews(request):

return render(request,'模板的名称')



# Create your views here.
def temp_views(request):
  #1.通过loader加载模板
  t=loader.get_template('01-temp.html')
  #2.将模板渲染成字符串
  html=t.render()
  #3.再通过HttpResponse将字符串响应给浏览器
  return HttpResponse(html)

# 使用render加载模板
def temp02_views(request):
  return render(request, '01-temp.html')


4.模板的语法

1.变量

1.作用:将后端的数据传递给模板进行显示

2.在Django中允许作为变量传递给模板的数据类型

字符串,整数,列表,元组,字典,函数,对象

3.变量的语法

变量们必须要封装到字典中才能传递给模板

1.使用 loader 加载模板

dic = {

'变量名1':'值1',

'变量名2':'值2',

}


t = loader.get_template('xxx.html')

html = t.render(locals() 或 dic)

return HttpResponse(html)

2.使用 render 加载并返回模板

dic = {

'变量名1':'值1',

'变量名2':'值2',

}

return render(request,'xx.html',dic)

4.在模板中使用变量

{{变量名}}




# http://localhost:8000/03-var
def var_views(request):
  str = "模板中的变量-字符串"
  num = 3306
  tup = ('谢逊','韦一笑','殷素素','金花婆婆')
  list = ['孙悟空','猪八戒','沙和尚']
  dic = {
    'BJ':'北京',
    'SZ':'深圳',
    'SH':'上海',
  }
  say = sayHi()
  dog = Dog()


  return render(request,'03-var.html',locals())


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

  <!-- 取出每个变量进行显示 -->
  <h3>str:{{ str }}</h3>
  <h3>num:{{ num }}</h3>
  <h3>tup:{{ tup }}</h3>
  <h3>tup[0]:{{ tup.0 }}</h3>
  <h3>list:{{ list }}</h3>
  <h3>list[1]:{{ list.1 }}</h3>
  <h3>dic:{{ dic }}</h3>
  <h3>dic['SZ']:{{ dic.SZ }}</h3>
  <h3>say:{{ say }}</h3>
  <h3>dog.name:{{ dog.name }}</h3>
  <h3>dog.eat:{{ dog.eat }}</h3>

  <!-- 宠物名称:{{ dog.name }} -->
  {% comment "宠物名称" %}
  宠物名称:{{ dog.name }}
  {% endcomment %}
</body>
</html>

django中不同于jinja2的模板 django的模板中不能使用索引和切片

只能通过·的方式来获取元素 但不影响循环

2.标签

1.作用

将服务器端的功能嵌入到模板中

2.语法

{% 标签内容 %}

3.常用标签

1. comment 标签

2. for 标签

作用:循环遍历 列表,字典,元组

语法:

{% for 变量 in 列表|元组|字典 %}

{% endfor %}


循环中允许使用 forloop 内置变量来获取循环的信息

forloop.counter : 当前循环遍历的次数

forloop.first : 判断是否为第一次循环

forloop.last : 判断是否为最后一次循环


3.if 标签

作用:在模板中完成变量的判断操作

语法:

1. if

{% if 条件 %}

满足条件时要执行的内容

{% endif %}

2. if ... else

{% if 条件 %}

满足条件时要执行的内容

{% else %}

不满足条件时要执行的内容

{% endif %}

3.if ... elif ... else

{% if 条件1 %}

满足条件1时要执行的内容

{% elif 条件2 %}

或满足条件2时要执行的内容

{% elif 条件3 %}

或满足条件3时要执行的内容

{% else %}

或以上条件都不满足时要执行的内容

{% endif %}



  <!-- 通过for循环便利tup -->
  <h1>使用for循环便利tup</h1>
  {% for t in tup %}
    <p
      {% if forloop.first %}
        style="background:red;"
      {% elif forloop.last %}
        style="background:blue;"
      {% else %}
        style="background:pink;"
      {% endif %}
    >
      <span>内容:{{ t }}</span>
      <br>
      <span>下标:{{ forloop.counter0 }}</span>
      <br>
      <span>次数:{{ forloop.counter }}</span>
      <br>
      <span>第一次循环:{{ forloop.first }}</span>
      <br>
      <span>最后一次循环:{{ forloop.last }}</span>
    </p>
  {% endfor %}

  <h1>通过for实现的select</h1>
  <select>
    {% for t in tup %}
      <option value="{{ forloop.counter0 }}"
       {% if forloop.last %}
         selected
       {% endif %}
      >{{ t }}</option>
    {% endfor %}
  </select>



3.过滤器

1.什么是过滤器

在变量输出显示之前,对变量进行筛选和过滤

2.过滤器的语法

{{变量|过滤器:参数}}


3.常用过滤器

1.{{value|upper}}

将value变为大写

2.{{value|lower}}

将value变为小写

3.{{value|add:num}}

将num值累加到value之后

4.{{value|floatformat:n}}

将value四舍五入到n位小数

5.{{value|truncatechars:n}}

将value截取保留至n位字符(包含...)


4.静态文件

1.什么是静态文件

在Django中,不被解释器所动态解析的文件就是静态文件

2.Django中静态文件的处理

在settings.py中设置有关静态文件的信息:

1.设置静态文件的访问路径

在浏览器中通过哪个地址能够找到静态文件

STATIC_URL = '/static/'

如果访问路径是 http://localhost:8000/static/...,那么就到静态文件存储路径中找文件而不走路由(urls.py)

2.设置静态文件的存储路径

指定静态文件存储在服务器上的哪个位置处

STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),)

静态文件目录的存放位置:

1.在项目的根目录处创建一个 static 目录,用于保存静态文件们

2.每个应用中也可以创建一个 static 目录,用于保存静态文件们

3.访问静态文件

1.直接使用静态文件访问路径进行访问

http://localhost:8000/static/..

ex:

<img src="/static/images/a.jpg">

<img src="http://localhost:8000/static/images/a.jpg">

2.使用 {% static %} 访问静态资源

{% static %} 表示的就是静态资源的访问路径

1.在模板的最顶层增加

{% load static %}

2.在使用静态资源时

<img src="{% static 'images/a.jpg'%}">





# http://localhost:8000/04-static
def static_views(request):
  return render(request, '04-static.html')


{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <!-- 显示静态资源文件 -->
  <p>
    <img src="/static/images/shuaige.jpg">
  </p>
  <p>
    <img src="http://localhost:8000/static/images/shuaige.jpg">
  </p>
  <p>
    <img src="{% static 'images/shuaige.jpg' %}">
  </p>
</body>
</html>


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值