Django(2)模板、标签

2023-05-16

文章目录

    • 一、使用Django模板修改页面
    • 二、Django模板标签
      • - 变量
      • - 列表
      • - 字典
      • - 过滤器
        • 1、default
        • 2、length
        • 3、filesizeformat
        • 4、date
        • 5、truncatechars
        • 6、safe
      • - if/else标签
      • - for标签
      • - ifequal/ifnotequal标签
      • - 注释标签
      • - include标签
      • - csrf_token
      • - 自定义标签和过滤器
      • - 配置静态文件
      • - 模板继承
        • 1、父模板
        • 2、子模版

此文章参考菜鸟教程:Django 模板 | 菜鸟教程 (runoob.com)
Django版本:

>>> django.VERSION  
(4, 1, 0, 'final', 0)

PS:基于前几章的进度进行修改

一、使用Django模板修改页面

  • 上一章中,直接使用了index_test.py添加\修改了资源页面,这次使用模板来添加资源页面\修改页面

  • 先来看index_test.py文件,可以看到使用了模块django.http.HttpResponse()来输出指定的信息:

#-*- coding: utf-8 -*-
from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello World!!!")
  • 而上面的这种方式会将数据和视图混合在一起,不符合Django中的MTC思想,所以我们可以使用模板来输出数据:

  • 根据上一章节中的项目结构,现在在helloworld项目目录下创建templates目录,然后创建test.html文件

  • 现在的目录结构如下:
    在这里插入图片描述

  • 下面是test.html模板文件的内容:

<h1>{{ hello }}</h1>  #这里是变量,使用了双括号
  • 下面向Django说明模板文件路径,修改helloworld容器目录下的settings.py文件:
import os  				#导入os模块
。。。。。。
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],             #修改DIRS,说明模板文件的路径,BASE_DIR是manage.py文件所在的路径
        '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',
            ],
        },
    },
]
  • 现在修改index_test.pyurls.py,增加一个新的对象,用于向模板提交数据

render()方法参数:

render(request, template_name, context=None, content_type=None, status=None, using=None)
  • request:必要参数,浏览器向服务器发送的请求对象,包含用户信息、请求内容、请求方式等
  • template_name:必要参数,设置模板文件名,用于生成网页内容
  • context:对模板上下文即模板变量赋值,以字典格式表示,默认情况下是一个空字典
  • content_type:响应内容的数据格式,一般情况下使用默认值即可
  • status:HTTP状态码,默认是200
  • using:设置模板引擎,用于解析模板文件、生成网页内容等
- index_test.py
#-*- coding: utf-8 -*-
from django.shortcuts import render

def hello(request):
    contest = {}
    contest['hello'] = 'Hello World!!!'
    return render(request,'test.html',contest)   #指定模板文件
- urls.py
#-*- coding: utf-8 -*-
from django.urls import path

from . import index_test

urlpatterns = [
    path('hello/',index_test.hello),
]
  • 可以看到,我们这里使用了render来代替之前使用的HttpResponserender使用了一个字典contest作为参数,contest字典中元素的键值hello对应了test.html模板文件中{{ hello }}变量

  • 再次进行访问:
    在这里插入图片描述

  • 可以看到已经替换页面了,现在已经完成了使用模板来输出数据,实现数据与视图分离

二、Django模板标签

  • 经过上面的实践,下面来看一下Django模板中常用的语法规则

- 变量

  • 模板语法:
视图view:{"HTML变量名":"views变量名"}
HTML:{{ 变量名 }}
  • 可以看到其实也就是字典,跟上面那个一样

  • 下面来看案例:

    • 现在修改视图文件index_test.py文件,下面是变量和字典的写法,可以看到思路其实是一样的:
    - 变量
    # -*- coding: utf-8 -*-
    from django.shortcuts import render
    
    def Hello(request):
        test_view = "测试"
        hello_view = "你好"
        return render(request,'test.html',{"test":test_view,"hello":hello_view})
    
    • 修改templates目录下的test.html文件:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>   #页面名称
    </head>
    <body>
        <p>{{ test }}</p>      #导入两个变量
        <h1>{{ hello }}</h1>
    </body>
    </html>
    
    • 再次访问,成功修改!

    在这里插入图片描述

- 列表

  • templates中的test.html文件,可以使用.索引下标取出相对应的元素

  • 下面来看案例:

    • 修改视图文件index_test.py,相当于是把字典的值换成列表:
    # -*- coding: utf-8 -*-
    from django.shortcuts import render
    
    def Hello(request):
        test_view = ["测试1号","测试2号","测试3号"]
        return render(request,'test.html',{"test":test_view})
    
    • 修改test.html文件:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
        <p>{{ test }}</p>
        <p>{{ test.0 }}</p>           #配合 . 可以根据列表下标调用元素
        <p>{{ test.2 }}</p>
    </body>
    </html>
    
    • 查看页面:

    在这里插入图片描述

- 字典

  • templates中的test.html文件,可以使用.键取出相对应的元素

  • 下面来看案例:

    • 修改视图文件index_test.py
    # -*- coding: utf-8 -*-
    from django.shortcuts import render
    
    def Hello(request):
        test_view = {"name":"测试","age":22}
        return render(request,'test.html',{"test":test_view})
    
    • 修改test.html文件:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
        <p>{{ test }}</p>
        <h1>{{ test.name }}</h1>
        <h2>{{ test.age }}</h2>
    </body>
    </html>
    
    • 查看页面:

    在这里插入图片描述

- 过滤器

  • 模板语法:
{{ 变量名 | 过滤器:可选参数 }}
  • 模板过滤器可以在变量被显示前修改它,过滤器使用管道字符:
{{ name | lower }}    #文档大写文本会转换成小写
  • 过滤管道可以被套接,也就是说一个过滤器的输出可以作为下一个过滤器的输入,与linux的管道符是一样的
{{ my_list | first | upper  }}   #取出第一个值并转换成大写
  • 有些过滤器有参数,过滤器的参数跟随冒号:之后并且总是以双引号""包含
{{ bio | truncatewords:"30" }}   #显示bio变量的前30个词
  • 其他过滤器

    • addslashes:添加反斜杠到任何反斜杠、单引号或者双引号前面
    • date:按照指定的格式字符串参数格式化date或者datetime对象
    {{ pub_date | date:"F J, Y"}}
    
    • length:返回变量的长度

1、default

  • default为变量提供一个默认值,如果视图传输的变量的布尔值是False,那么就会使用指定的默认值,以下的值的布尔值都是False

    0  
    0.0  
    False  
    0j  
    ""  
    [] 
    ()  
    set()  
    {}  
    None
    
  • 下面来看案例:

    • 修改index_test.py视图文件:
    # -*- coding: utf-8 -*-
    from django.shortcuts import render
    
    def Hello(request):
        test_view = {"name":"zhangsan","time":0}
        return render(request,'test.html',{"test":test_view})
    
    • 修改test.html文件:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
        <p>{{ test }}</p>
        <h1>{{ test.time | default:"测试!!" }}</h1>  #变量的布尔值为False则变量值为 测试!!
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

2、length

  • length可以返回对象的长度,一般适用于字符串和列表,字典返回的是键值对的数量,集合返回的是去重后的长度

  • 下面来看案例:

    • 修改index_test.py视图文件
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    
    def hello(request):
        test_view = "测试"
        return render(request,"test.html",{"test":test_view})
    
    • 修改test.html文件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
        <p>{{ test | length }}</p>
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

3、filesizeformat

  • filesizeformat会以更人性化的方式显示文件的大小,其实就是加上单位,如KB、MB等

  • 字典返回的是键值对的数量,集合返回的是去重后的长度,下面来看案例:

    • 修改index_test.py视图文件
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    
    def hello(request):
        test_view = 10240
        return render(request,"test.html",{"test":test_view})
    
    • 修改test.py文件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
        <p>{{ test | filesizeformat }}</p>
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

4、date

  • date会根据指定格式对一个日期变量进行格式化,格式Y-m-d H:i:s返回年-月-日 时:分:秒的格式时间

  • 下面来看案例:

    • 修改index_test.py视图文件
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    import datetime
    
    
    def hello(request):
        test_view = datetime.datetime.now()
        return render(request,"test.html",{"test":test_view})
    
    • 修改test.py文件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
        <p>{{ test | date:"Y-m-d H:i" }}</p>
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

5、truncatechars

  • truncatechars可以截断字符串,如果字符串包含的字符总数多于指定的字符数量,那么多出的部分会被截断,只剩余指定数量的字符

  • 下面来看案例:

    • 修改index_test.py视图文件
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    
    
    def hello(request):
        test_view = "测试!!案例??"
        return render(request,"test.html",{"test":test_view})
    
    • 修改test.py文件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
        <p>{{ test | truncatechars:4 }}</p>
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

6、safe

  • Django 会自动对视图文件传到HTML文件中的标签语法进行转义,令其语义失效。而加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效。

  • safe会将字符串标记为安全,不需要转移,但是需要保证视图文件传过来的数据是绝对安全,才能使用safe

  • safe和后端视图文件的mark_safe效果相同

  • 下面来看案例

    • 修改index_test.py视图文件
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    
    
    def hello(request):
        test_view = "<a href='https://www.baidu.com/'>点击跳转</a>"
        return render(request,"test.html",{"test":test_view})
    
    • 修改test.py文件,先看不加safe的
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
        <p>{{ test }}</p>
    </body>
    </html>
    
    • 访问

    在这里插入图片描述

    • 现在加上safe
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
        <p>{{ test | safe }}</p>
    </body>
    </html>
    
    • 访问页面,可以进行跳转

    在这里插入图片描述

    在这里插入图片描述

- if/else标签

  • if/else基本语法格式:
{% if condition %}
     ... display
{% endif %}{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}
  • 可以根据条件判断是否输出,并且if/else支持嵌套

  • {% if %}标签接收andornot等关键字对多个变量进行判断,这点和python基础的流程控制是一样的

  • 下面来看案例:

    • 修改index_test.py视图文件
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    
    
    def hello(request):
        test_view = 95
        return render(request,"test.html",{"test":test_view})
    
    • 修改test.py文件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
    {%if test > 90 and test <= 100 %}
    优秀
    {% elif test > 60 and test <= 90 %}
    合格
    {% else %}
    一边玩去~
    {% endif %}
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

- for标签

  • {% for %} 允许我们在一个序列上迭代,与Python中的for循环类似,每一次循环中,模板系统会渲染在{% for %}{% endfor %}之间的所有内容

  • 下面来看案例:

    • 修改index_test.py视图文件
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    
    
    def hello(request):
        test_view = ["aaa","bbb","ccc","ddd","eee"]
        return render(request,"test.html",{"test":test_view})
    
    • 修改test.py文件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
    {% for i in test %}
    {{ i }}
    {% endfor %}
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

    • 给标签增加一个reversed可以使列表被反向迭代:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
    {% for i in test reversed %}   #添加reversed
    {{ i }}
    {% endfor %}
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

    • for循环也可以遍历字典,使用.items方法,用变量的解包分别获取键和值,下面来修改index_test.py文件
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    
    
    def hello(request):
        test_view = {"name":"测试","age":22}}
        return render(request,"test.html",{"test":test_view})
    
    • 修改test.html文件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
    {% for i,j in test.items %}
    {{ i }}:{{ j }}
    {% endfor %}
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

    • {% for %}标签中,可以通过{{forloop}}变量获取循环序号
    'forloop.counter':顺序获取循环序号,从 1 开始计算
    'forloop.counter0':顺序获取循环序号,从 0 开始计算
    'forloop.revcounter':倒序获取循环序号,结尾序号为 1
    'forloop.revcounter0':倒序获取循环序号,结尾序号为 0
    'forloop.first(一般配合if标签使用)':第一条数据返回 True,其他数据返回 False
    'forloop.last(一般配合if标签使用)':最后一条数据返回 True,其他数据返回 False
    
    • 下面修改文件:
    - index_test.py
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    
    
    def hello(request):
        test_view = ["a","b","c","d","e"]
        return render(request,"test.html",{"test":test_view})
    
    - test.html#依次使用forloop变量
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
    {% for i in test %}
    {{ forloop.counter }}
    {{ forloop.counter0 }}
    {{ forloop.revcounter }}
    {{ forloop.revcounter0 }}
    {{ forloop.first }}
    {{ forloop.last }}
    {% endfor %}
    </body>
    </html>
    

    {{ forloop.counter }}

    在这里插入图片描述

    {{ forloop.counter0 }}

    在这里插入图片描述

    {{ forloop.revcounter }}

    在这里插入图片描述

    {{ forloop.revcounter0 }}

    在这里插入图片描述

    {{ forloop.first }}

    在这里插入图片描述

    {{ forloop.last }}

    在这里插入图片描述

    • {% empty %}可选从句,在循环为空时执行,也就是in后面的参数布尔值为False时,下面修改文件
    - index_test.py
    #-*- coding: utf-8 -*-
    from django.shortcuts import render
    
    
    def hello(request):
        test_view = []  #设置列表为空
        return render(request,"test.html",{"test":test_view})
    
    - test.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
    {% for i in test %}
    {{ forloop.counter0 }}
    {% empty %}{% endfor %}
    </body>
    </html>
    
    • 访问页面

    在这里插入图片描述

- ifequal/ifnotequal标签

  • {% ifequal %}标签可以比较两个值,当比较结果相等时,会显示在{% ifequal %}{% endifequal %}之中所有的值,下面来看案例:
#对比两个模板变量
{% ifequal {{ user }} {{ currentuser }} %}
    <h1>Welcome!</h1>
{% endifequal %}
  • 和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签:
{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

- 注释标签

  • Django中注释使用{# #},例如
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>

{# <h1>aaa</h1> #}
<h1>test</h1>

</body>
</html>
  • 访问

在这里插入图片描述

- include标签

  • {% include %}标签允许在模板中包含其他模板的内容,例如:
- test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>

<h1>test</h1>
{% include "test_2.html" %}   #调用test_2.html的内容

</body>
</html>

- test_2.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试_2</title>
</head>
<body>

<h1>test_2</h1>

</body>
</html>
  • 查看页面

在这里插入图片描述

- csrf_token

  • csrf_token 用于form表单中,作用是跨站请求伪造保护

如果不用{% csrf_token %}标签,在用 form 表单时,要再次跳转页面会报 403 权限错误。

用了{% csrf_token %}标签,在 form 表单提交数据时,才会成功。

  • 解析:
  1. 首先,向服务器发送请求,获取登录页面,此时中间件 csrf 会自动生成一个隐藏input标签,该标签里的 value 属性的值是一个随机的字符串,用户获取到登录页面的同时也获取到了这个隐藏的input标签。

  2. 然后,等用户需要用到form表单提交数据的时候,会携带这个 input 标签一起提交给中间件 csrf,原因是 form 表单提交数据时,会包括所有的 input 标签,中间件 csrf 接收到数据时,会判断,这个随机字符串是不是第一次它发给用户的那个,如果是,则数据提交成功,如果不是,则返回403权限错误。

- 自定义标签和过滤器

  • 下面是自定义标签和过滤器的过程:

(1)在helloworld的项目目录下创建目录templatetags,与templates目录同级,需要注意,目录名称必须是templatetags

在这里插入图片描述

(2)在templatetags目录下创建任意的.py文件,这里创建my_tags.py

在这里插入图片描述

(3)编写文件,写入:

#-*- coding: utf-8 -*-
from django import template

register = template.Library()             #变量名称register是固定的,不能修改

(4)修改settings.py文件的TEMPLATES选项配置,添加libraries配置:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(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',
            ],
            "libraries":{						#添加
                'my_tags':'templatetags.my_tags'	#添加
            }								#添加
        },
    },
]

(5)利用装饰器@register.filter自定义过滤器,利用装饰器@register.simple_tag自定义标签

注意:装饰器的参数最多只能有2个

#-*- coding: utf-8 -*-
from django import template

register = template.Library()

@register.filter   #自定义过滤器
def my_filter(v1,v2):
    return v1 * v2

@register.simple_tag   #自定义标签
def my_tag1(v1,v2,v3):
    return v1 * v2 * v3

(7)修改模板文件test.html,在body的最上方导入该.py文件,并且在文件中使用我们自定义的过滤器和标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
    {% load my_tags %}   #导入刚才编写的my_tags文件
</head>
<body>

{{ 11 | my_filter:22}}     #使用自定义的过滤器和标签
{% my_tag1 11 22 33 %}

</body>
</html>

此时访问页面,发现我们自定义的过滤器和标签已经生效了

在这里插入图片描述

(8)创建语义化标签(语义化的标签,旨在让标签有自己的含义)

  • 在创建的my_tags.py文件中导入mark_safe并且进行修改
#-*- coding: utf-8 -*-
from django import template
from django.utils.safestring import mark_safe

register = template.Library()


@register.simple_tag
def my_html(v1,v2):
    temp_html = "<input type='test' id='%s' class='%s' />" %(v1,v2)
    return mark_safe(temp_html)
  • 然后修改test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
    {% load my_tags %}
</head>
<body>

{% my_html "aaa" "bbb" %}

</body>
</html>
  • 访问页面

在这里插入图片描述

- 配置静态文件

  • 这节需要下载图片、bootstrap框架、css页面等,可以去看原文

  • 大致步骤:

  1. 在项目根目录下创建static目录

在这里插入图片描述

  1. settings.py文件最后添加配置:
STATIC_URL = '/static/'  #别名
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "statics"),   #指定目录
]
  1. static目录下创建cssjsimagesplugins目录,分别存放css文件、js文件、图片、插件

  2. bootstrap框架放入插件目录plugins

  3. 在HTML文件的head标签中引擎框架bootstrap

  4. 编写模板,模板中加入{% load static %}代码

- 模板继承

  • 模板可以使用继承的方式实现复用,减少冗余内容
  • 网页的头部、尾部内容一般都是一致的,这种情况下就可以通过模板继承来实现复用
  • 父模板用于放置可重复利用的内容,子模板继承父模板的内容,并且放置自己的内容

1、父模板

  • 标签{% block %},这是父模板中的预留区域,该区域留给子模版填充差异性的内容,不同预留区域名称不能相同,例如:
{% block 名称 %} 
预留给子模板的区域,可以设置设置默认内容
{% endblock 名称 %}

2、子模版

  • 子模板使用标签extends去继承父模板,例如:
{% extends %}
  • 子模版如果没有设置父模板预留区域的内容,则使用在父模板设置的默认内容,也可以什么都不设置,为空
  • 下面来看案例:
#编写父模板test_2.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>父页面</title>
</head>
<body>

<h1>Hello World!</h1>
<p>案例</p>
{% block test %}            #名称为test
    <p>测试测试!!!</p>   #中间的内容就是子模板可以替换的部分
{% endblock %}

</body>
</html>


#编写子模版test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>子页面</title>
</head>
<body>

{%extends "test_2.html" %}
{% block test %}     #这里的名称要和父模板名称对应
<p>继承test_2.html文件</p>
{% endblock %}

</body>
</html>
  • 访问页面,可以看到被替换了

在这里插入图片描述

  • 修改子模板,删除{% block %}的内容:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>子页面</title>
</head>
<body>

{%extends "test_2.html" %}

</body>
</html>
  • 再次访问,发现页面完全变成了test_2.html的页面

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django(2)模板、标签 的相关文章

  • Django 使用用户/IP 进行日志记录

    我正在使用 logging 模块来记录大量消息 我想将 用户 request user 添加到日志中 但是 虽然它在视图函数中可用 但我不想将其传递给所有助手 有谁知道这个方法吗 我正在考虑以某种方式跟踪跟踪 直到找到参数中带有 请求 的函
  • Mac 上的 GeoDjango 和 Spatialite:C 扩展加载问题

    我正在关注GeoDjango 教程 https docs djangoproject com en dev ref contrib gis tutorial 在我的家用计算机 运行 OSX 10 8 2 的 Mac Mini 上为我的项目设
  • 如何使用 django Rest 框架保存多对多字段对象

    我有博客 发布 标签三个模型 在博客模型中 我将字段 postedin 作为发布模型的外键 将 标签 作为标签模型的许多字段 模型 py class Posted models Model name models CharField Pos
  • django-tastypie:无法访问脱水中的bundle.request(self,bundle)

    我发现有人有同样的问题 但他的安慰对我不起作用 看Django Tastypie 如何访问 Bundle 中的 Http request 对象 https stackoverflow com questions 7389632 我正在尝试应
  • 使用 Celery 通过 Gevent 进行实时、同步的外部 API 查询

    我正在开发一个 Web 应用程序 该应用程序将接收用户的请求 并且必须调用许多外部 API 来编写对该请求的答案 这可以直接从主 Web 线程使用 gevent 之类的东西来扇出请求来完成 或者 我在想 我可以将传入的请求放入队列中 并使用
  • Django 跨反向关系聚合

    鉴于这两个模型 class Profile models Model user models ForeignKey User unique True verbose name user about models TextField abou
  • 您将如何创建“手动”django 迁移?

    我发现我可以使用 django 项目中的 postgres 数据库设置列的默认值migrations RunSQL some sql 我目前正在通过添加列 makemigrations 然后删除列 makemigrations 然后手动修改
  • 对(静态)CSS 文件所做的更改未反映在 Django 开发服务器中

    我正在使用 Django 制作一个 Web 应用程序 但在将 CSS 文件 存储在我的应用程序的静态目录中 中所做的更改反映到开发服务器上时遇到了一些问题 需要明确的是 服务器能够访问静态文件 但是 它目前停留在我的 CSS 文件的旧版本上
  • Django 是否使用一个线程来处理 WSGI 或 Gunicorn 中的多个请求?

    根据标题 我想知道 Django 在通过 WSGI 或 Gunicorn 运行时是否使用一个线程来处理多个请求 我知道从不应该访问的地方访问请求是一种不好的做法 但我仍然想这样做 我认为有充分的理由 例如在我的自定义模板加载器中访问当前用户
  • 如何阻止 Django 中发生级联删除?

    我的 Django 应用程序中有三个模型类 class Folder models Model folder models ForeignKey Folder null True blank True related name folder
  • 在生产中提供 django 媒体(用户上传)文件

    我已将我的 django 网站部署到 webfaction 托管服务上 并且我正在努力寻找如何在生产中为用户上传的媒体文件提供服务 关于如何在开发中提供媒体文件存在很多问题 但似乎没有关于在生产中提供媒体 用户上传 文件的信息 目前 我的
  • Django 和自定义表单验证

    我正在尝试创建一个自定义表单字段并对其进行验证 这是 Django 1 0 版本 这是我的表单对象 class UsernameField forms CharField def clean self values print 我是这样称呼
  • django REST框架多源领域

    假设我的 models py 中有这些 models py class Theme models Model An theme is an asset of multiple levels adventure models ForeignK
  • django RequestFactory 文件上传

    我尝试使用 RequestFactory 创建请求并使用文件发布 但我没有收到 request FILES from django test client import RequestFactory from django core fil
  • Django重复输入错误(1062)的原因?

    我更新了下面的信息以引用给我相同错误的不同模型 视图 它是一个更简单的模型 因此需要考虑的变量更少 我有以下模型 class Imaging order Order order description models ForeignKey I
  • Django Web 应用程序中的 SMTP 问题

    我被要求向使用 Django Python 框架实现的现有程序添加一个功能 此功能将允许用户单击一个按钮 该按钮将显示一个小对话框 表单以输入值 我确实编写了一些代码 显示电子邮件已发送的消息 但实际上 它没有发送 My code from
  • 如何正确自定义 Django LoginView

    我试图弄清楚如何根据用户当天是否第一次登录来自定义 django LoginView 我当前已设置 LoginView 使其默认为 settings py 文件中的 LOGIN REDIRECT URL book author 这工作完美无
  • 如何使用 django-pyodbc (ubuntu 16.04) 配置数据库设置 Django-MSSQL?

    我是 Django 新手 目前正在尝试使用另一个数据库来保存我的模型 即MS SQL 我的数据库部署在docker容器中 903876e64b67 microsoft mssql server linux bin sh c opt mssq
  • Django - 隐藏内联标签

    如何在 Django 内联中隐藏标签 当我理解正确时 您可以通过添加属性将 verbose name 设置为模型中的空字符串 verbose name 到你的领域就像 street models CharField max length 5
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles

随机推荐