Django——模板

Django——模板

  • 渲染模板
  • 路径配置
  • 常用模板标签
  • 过滤器
  • 模板继承
  • 加载静态文件
  • 限制请求
  • 重定向

一、渲染模板
django提供了一个十分简便的方式,直接将模板渲染成字符串和包装成HttpResponse对象一步到位完成。

 from django.shortcuts import render
 def blog_list(request):
     return render(request,'list.html')

二、路径配置

在项目的settings.py文件中,有一个TEMPLATES配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。

  1. DIRS:这是一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用render渲染模板的时候,会在这个列表的路径中查找模板。
  2. APP_DIRS:默认为True,这个设置为True后,会在INSTALLED_APPS的安装了的APP下的templates文件加中查找模板。(需预先配置INSTALLED_APPS)
  3. 查找顺序:比如代码render(‘list.html’)。先会在DIRS这个列表中依次查找路径下有没有这个模板,如果有,就返回。如果DIRS列表中所有的路径都没有找到,那么会先检查当前这个视图所处的app是否已经安装,如果已经安装了,那么就先在当前这个app下的templates文件夹中查找模板,如果没有找到,那么会在其他已经安装了的app中查找。如果所有路径下都没有找到,那么会抛出一个TemplateDoesNotExist的异常。

三、常用的模板标签
1.if标签:if标签相当于Python中的if语句,有elif和else相对应,但是所有的标签都需要用标签符号({%%})进行包裹。

{
     % if blog_num==1 %}
     <p>True</p>
 {
     % else %}
     <p>Flase</p>
 {
     % endif %}

2.for…in…标签:for…in…类似于Python中的for…in…。可以遍历列表、元组、字符串、字典等一切可以遍历的对象。

 {
     % for blog in blogs %}
     <p>{
     {
      blog.num }}</p>
 {
     % endfor %}

3.with标签:在模版中重新定义变量。
4.spaceless标签:移除html标签中的空白字符,包括空格、tab键、换行等。
5.autoescape标签:开启和关闭这个标签内元素的自动转义功能。

四、过滤器

1.在模版中,有时候需要对一些数据进行处理以后才能使用,这就需要通过过滤器来实现,过滤器用|来实现。

2.自定义过滤器:
①模版过滤器必须要放在app中,并且这个app必须要在INSTALLED_APPS中进行安装。然后再在这个app下面创建一个Python包叫做templatetags。再在这个包下面创建一个python文件,例如:

- blog
    - views.py
    - urls.py
    - models.py
    - templatetags
        - blog_num.py

②参数
过滤器的函数最多只能有两个参数,第一个参数必须是这个过滤器需要处理的值,第二个参数可有可无,如果有,那么就意味着在模板中可以传递参数。
③注册
在写完过滤器后,使用django.template.Library对象注册进去。

blog_num.py:

from django import template

# 创建模板库对象
register = template.Library()

# 过滤器函数
def blognum(value):
    return value

# 将函数注册到模板库中
register.filter("blognum",blognum)

④以后想要在模板中使用这个过滤器,就要在模板中load一下这个过滤器所在的模块的名字(也就是这个python文件的名字)。

{
     % load blog_num %}
...
{
     % value|blognum %}
...

五、模板继承
模版继承可以在父模版中先定义好一些子模版需要用到的代码,然后子模版直接继承就可以了,可以在父模版中定义一个block接口,然后子模版再去实现。

六、加载静态文件
1.将django.contrib.staticfiles添加到settings.INSTALLED_APPS中。

2.在settings.py中设置STATIC_URL。

3.在已经安装了的app下创建一个文件夹叫做static,然后再在这个static文件夹下创建一个当前app的名字的文件夹,再把静态文件放到这个文件夹下。例如你的app叫做blog,有一个静态文件叫做picture.jpg,那么路径为blog/static/blog/picture.jpg。

4.如果有一些静态文件是不和任何app挂钩的。那么可以在settings.py中添加STATICFILES_DIRS,以后DTL就会在这个列表的路径中查找静态文件。

5.在模版中使用load标签加载static标签。

七、请求限制

1.django.http.decorators.http.require_http_methods:这个装饰器需要传递一个允许访问的方法的列表。

#只能通过GET的方式访问
from django.views.decorators.http import require_http_methods

 @require_http_methods(["GET"])
 def blog_view(request):
     pass

2.django.views.decorators.http.require_GET:这个装饰器相当于是require_http_methods([‘GET’])的简写形式,只允许使用GET的method来访问视图。

from django.views.decorators.http import require_GET

 @require_GET
 def blog_view(request):
     pass

3.django.views.decorators.http.require_POST:这个装饰器相当于是require_http_methods([‘POST’])的简写形式,只允许使用POST的method来访问视图。

from django.views.decorators.http import require_POST

 @require_POST
 def blog_view(request):
     pass

4.django.views.decorators.http.require_safe:这个装饰器相当于是require_http_methods([‘GET’,‘HEAD’])的简写形式,只允许使用相对安全的方式来访问视图。

from django.views.decorators.http import require_safe

 @require_safe
 def blog_view(request):
     pass

八、重定向

重定向分为永久性重定向和暂时性重定向,在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面。永久性重定向:http的状态码是301,多用于旧网址被废弃了要转到一个新的网址确保用户的访问。暂时性重定向:http的状态码是302,表示页面的暂时性跳转。在Django中,重定向是使用redirect(to, *args, permanent=False, **kwargs)来实现的。to是一个url,permanent代表的是这个重定向是否是一个永久的重定向,默认是False。

你可能感兴趣的:(Django,django,后端,python)