Django入门教程(四)模板的查找顺序与渲染及过滤器的使用

模板的渲染:视图函数在返回response的时候,返回的是一个html文件,并且会传递一些数据给html,最终将这些数据展示在页面上。

Django中提供了一个templates文件夹,用于存放所有的html文件。
templates文件夹的创建位置:
1、在项目根目录下创建:这种情况下整个项目只有一个templates文件夹,供所有的app使用;
2、分模块,在各自的app下创建templates文件夹。

以下先进行第一种的情况。

1、创建项目和app。
在这里插入图片描述
2、设置项目根目录为source root
在这里插入图片描述
3、在项目根目录下创建一个名为templates的文件夹。
在这里插入图片描述
并在templates文件夹下新建一个index.html文件。
在这里插入图片描述

4、此时我们在入口的urls.py文件(即djangotemplates下的urls.py)写入如下代码:

from django.contrib import admin
from django.urls import path
from temrender import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index)
]

在这里插入图片描述

5、编写业务逻辑,即views.py文件。
在这里插入图片描述

def index(request):
    #render:渲染
    #模板:html文件
    #template_name:指定要渲染的模板名称。
    return render(request,template_name='index.html')

6、在settings.py文件配置templates文件路径。
在这里插入图片描述
6、运行查看,浏览器输入网址127.0.0.1:8000/index
在这里插入图片描述

第二种

如果是将templates文件夹放在了每一个app下,要注意模板可能会引用错,引用到其他app下的模板文件。
模板的查找顺序是先从根目录下的templates文件中查找,如果根目录下templates这个文件夹/或者说没有找到需要的模板,此时Django会去自己的app下的templates中找模板。如果自己app下的templates中没有这个模板,再去其他app下的templates中查找。如果最终所有的templates中都没有找到所需的模板,就会抛出异常,说模板文件不存在 TempalateDontExisted

1、在创建一个app
命令python manage.py startapp render
2、在render这个app和temrender这个app下分别新建一个templates文件夹,并分别在文件夹下新建一个index.html文件。
在这里插入图片描述

3、此时我们在每个app及根目录下的templates文件夹下的index.html文件稍作修改。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、此时我们先运行一下看到的是如下图所示:
在这里插入图片描述

5、现在我们将根目录下的templates文件夹下的index.html改为index1.html.
在这里插入图片描述
6、再次运行,发现已经变成了render这个app的index.html了。
在这里插入图片描述
且模板的查找顺序是按照注册app的顺序查找的。
在这里插入图片描述
同理,将render这个app下得templates文件夹下的index.html文件夹改为index1.html后,浏览器运行就会显示的是temrender这个app的index.html模板。原因是在根目录下没有查找到templates文件夹下的index.html,此时按照注册app顺序,先去render这个app中查找,没有找到templates文件夹下的index.html。此时就会去找temrender这个app下的templates文件夹下的index.html文件。这里不做尝试,望读者自行尝试。

7、解决办法
在各自app下的templates文件中,在新建一个文件夹,用于区分文件名相同的html模板文件。
此时我们以temrender这个app做示范。在其templates文件夹下再新建一个temrender文件夹。把index.html挪进这一级的文件夹下。
)

修改视图函数中template_name。
在这里插入图片描述
此时运行,返回的就是指定的的app模板index.html。
在这里插入图片描述

第三部分

如何在渲染模板的时候,向模板传递数据。

注:能够传递的数据:字符串、列表、字典、对象、数字类型(整数、小数等)。

1、我们在views.py文件中编写代码。

class People(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def get_name(self):
        return '我的名字是:{}'.format(self.name)

def html_data(request):
    '''
    如何在渲染模板的时候,向模板传递数据。
    能够传递的数据:字符串、列表、字典、对象、数字类型(整数、小数等)
    :param request:
    :return:
    '''
    p1=People('李四',25)
    #context:上下文,负责向模板传递数据
    return render(request, template_name='temrender/index.html',context={
        'name':'张三',
        'books':['Html','js','cs',100,20.1,True],
        'date':datetime.datetime.now(),
        'object':p1
    })

在这里插入图片描述

在入口文件urls.py中国编写路由。
在这里插入图片描述
浏览器运行查看。
在这里插入图片描述

2、现在我们接着取传递的其他参数。

{# {{ }}:作用就是用于加载一个变量的值,name就是变量名 #}
{# 如果是列表数据,可以通过索引取一个值,也可以通过for循环遍历 #}

由于books是一个列表数据,所以我们可以通过索引取值,或是for循环取值。
①索引取值
编写代码:
在这里插入图片描述
网页刷新查看
在这里插入图片描述
②for循环取值
编写代码
在这里插入图片描述
运行查看
在这里插入图片描述
3、接着取对象的属性。
这里为了方便查看,将之前定义的object改为了people,即
在这里插入图片描述
取出people属性的,同时做if条件判断。编写代码
在这里插入图片描述
刷新查看:
在这里插入图片描述
4、取字典的值
①根据键取值
在这里插入图片描述
刷新查看
在这里插入图片描述
②for循环取值
在这里插入图片描述
刷新查看
在这里插入图片描述

总结:

  {# #}:注释语法
  {{ name }}:作用就是用于加载一个变量的值,name就是变量名 
  如果是列表数据,可以通过索引取一个值,也可以通过for循环遍历   
  {%  %}:作用就是用来写for循环,if判断等条件语句的语法
  {% for foo in object %}
  	  代码1
  {% endfor %}:for循环语句
  {% if people.age < 18 %}
      代码1
  {% elif people.age < 30 %}
      代码2
  {% else %}
      代码3
  {% endif %} :if条件判断

补充:此处再补充列表的其他几种遍历方式。

{% for book in books %}
{#         forloop.counter:获取循环的计数,即列表的长度,我之前定义的列表长度是6 #}
{#         counter:计数从1开始,123456#}
{#         counter0:计数从0开始,012345 #}
{#         revcounter:倒序从6开始计数,654321#}
{#         revcounter0:倒序从5开始计数,543210 #}
        <p>{{ forloop.counter }}:{{ book }}</p>
        <p>{{ forloop.counter0 }}:{{ book }}</p>
        <p>{{ forloop.revcounter }}:{{ book }}</p>
        <p>{{ forloop.revcounter0 }}:{{ book }}</p>
    {% endfor %}

刷新显示
在这里插入图片描述
至此,模板的渲染到此结束。

第三部分
模板过滤器的使用:

①模板语言中的过滤器的作用主要就是对{{ 变量 }}的值进行处理,比如设置时间格式,大小写转换等。
②多个过滤器用|隔开即可

代码实现
在这里插入图片描述
刷新显示
在这里插入图片描述
这里诸多过滤器不一一介绍,需要的使用的可以参考2.1官方文档
在这里插入图片描述
至此,模板的查找顺序与渲染及过滤器的使用到此结束。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值