首页 > 其他分享 >十二、Django视图函数和模版相关

十二、Django视图函数和模版相关

时间:2024-02-11 20:44:06浏览次数:21  
标签:... name index 模版 request 视图 Django html block

视图相关

HTTPRequest对象:
属性:path
函数:get_full_path()
HTTPResponse对象:
render()
render_to_response()
locals() :局部变量

redirect() 重定向

例子:用户登录成功后跳转

def login(request):
    ...
    # 判断登录成功后,跳转到index
    return render(request, "index.html")
    ...

在上述代码下,用户登录成功,后台直接渲染index页面给用户,不经过urls路由,url还是.../login/ 用户登录的url。
修改:

def login(request):
    ...
    # 判断登录成功后,跳转到index
    return redirect("/index/")
    ...

使用redirect ( ) 就可以经过urls路由跳转到index页面,经过index对应的视图函数

模版相关

1、参数

t = "hello world!"
name = "Tom"
return render(req, "index.html", {"str":t, "name":name, "request":request,})

上下文查询
<h1>{{ name }}{{ t }}</h1>
深度查询
a、句点符
<h1>{{ request.method }}</h1>
b、索引查询

names = ["Tom", "Hedi",]
return render(req, "index.html", {"names":names, "request":request,})
<h1>{{ names.0 }}</h1>
<h1>{{ names.1 }}</h1>

c、查询字典

s = {“name”:“Tom”, “age":20, "gender":"man"}
return render(req, "index.html", {"s":s, "request":request,})
<h1>{{ s.name }}</h1>
<h1>{{ s.age }}</h1>
<h1>{{ s.gender }}</h1>

d、查询对象属性

class Animal():
    def __init__(self, name, sex, age):
        self.name = name
		self.sex = sex
        self.age = age

def query(request):
    a = Animal("qe", "male", 10)
    return render(request, "index.html", {"animal":a})
<h1>{{ a.name }}</h1>
<h1>{{ a.sex }}</h1>

2、标签(tag)的使用

a、if

{% if a.age > 10 %}
	<h1>hello {{ a.name }}</h1>
{% endif %}
{% if a.age > 10 %}
	<h1>hello {{ a.name }}</h1>
	{% if a.age > 20 %}
		<h1>年龄大于20</h1>
	{% else %}
  	<h1>年龄大于10小于20</h1>
	{% endif %}
{% elif a.age > 5 %}
	<h1>{{ a.name }} 的年龄大于5小于10</h1>
{% else %}
	<h1>{{ a.name }} 的年龄小于5</h1>
{% endif %}

b、for

{% for n in names %}
	{{ n }}
{% endfor %}

索引:forloop.counter 、 forloop.counter0

{% for n in names %}
	<p>{{ forloop.counter }}:{{ n }}</p>
{% endfor %}

forloop.first

{% for n in names %}
	{% if forloop.first %}
  	<li class="first">
  {% else %}
    <li>
  {% endif %}
	{{ n }}
  </li>
{% endfor %}

empty

{% for n in names %}
	<p>{{ forloop.counter }}:{{ n }}</p>
{% empty %}
<p>无相关内容</p>
{% endfor %}

c、csrf_token标签

<form action="{% url "reg" %}" method="POST">
  {% csrf_token %}
    <p>姓名<input type="text" name="user"></p>
    <p>年龄<input type="text" name="age"></p>
    <p>爱好<input type="checkbox" name="hobby" value="1">篮球
            <input type="checkbox" name="hobby" value="2">足球
            <input type="checkbox" name="hobby" value="3">乒乓球
    </p>
    <p><input type="submit">提交</p>
</form>

csrf_token标签的作用: 在template渲染时django给模版发一个身份信息如下图,name=...,value=...,使form表单post提交时后台根据这个身份信息能认识这个提交。从而避免了静态文件一章中的csrf中间拦截。
页面源码:

csrf_token标签使form表单增加了一个hidden的input,持有后台给的name和value

d、其它标签

url、with、verbatim、load等

2、Fliter的使用(过滤器)

https://c.biancheng.net/view/7580.html

过滤器 使用说明。
length 获取变量的长度,适用于字符串和列表。
lower/upper 转换字符串为小写/大写形式。
first/last 获取变量的首个/末尾元素。
add:'n' 给变量值增加 n。
safe 默认不对变量内的字符串进行html转义。
cut 从给定的字符串中删除指定的值。
dictsort 获取字典列表,并返回按参数中给定键排序的列表。
join 用字符串连接列表,例如 Python 的 str.join(list)。
truncatewords 如果字符串字符多于指定的字符数量,那么会被截断。 截断的字符串将以可翻译的省略号序列(“...”)结尾。

使用例子:

<p>hello:{{value|length}}</p>  # 如果value=“Tom”,则过滤器结果为3.另外,value也可以是列表或字典
<p>hello:{{value|truncatewords:2}}</p> # value=Django is website,则过滤器结构为Django is ...

3、自定义过滤器

1、在app中创建templatetags模块

2、创建任意.py文件,如:my_tags.py

定义代码:

from django import template
from django.utils.safestring import mark_safe

register = template.Library() #register的名字是固定

@register.filter
def filter_multi(x,y):
    return x*y

3、使用

{% load my_tags %}

{{ a.age|filter_multi:2 }}

@register.filter #只能传一个参数
simple_tag可以传多个参数

4、simple_tag

@register.simpler_tag
def simple_tag_multi2(x,y,z):
    return x*y*z

{% simple_tag_multi2 3 8 2 %}
但simple_tag不能用在控制语句中,必须用@register.filter

4、继承

{% block %}

在html中添加block标签,让继承它的子模版可以修改内容

<body>
  ...
  {% block content %}
    <p>Welcome to base</p>
  {% endblock %}
  ...
</body>

让index.html继承base.html

{% extend "base.html" %}

{% block content %}
	{% for student in student_list %}
     <h2>学生{{ student }}</h2>
  {% endfor %}
{% endfor %}

在head中也可以写block

<head>
  ...
  {% block styles %}
  {% endblock %}
  ...
</head>
{% extend "base.html" %}

{% block styles %}
	<style>
    h2{
        color:red;
    }
  </style>

{% endblock %}

{% block content %}
	{% for student in student_list %}
     <h2>学生{{ student }}</h2>
  {% endfor %}
{% endfor %}

block.super: 获得父模版的内容

{% block content %}
	...
	{{ block.super }}
	...
{% endblock %}

标签的使用:

{% extends %} 须保证为模版中第一个模版标记,否则,模版继承不起作用
{% block %} 一般来说block标签越多越好。“钩子越多越好”
block标签的工作方式是双向的。在同一个模版中不允许定义多个同名的block。

5、Include标签

当html中有大量重复代码时,考虑将重复代码单独放在一个html中,然后在用到这些代码时,通过include标签加入。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1 style="color:#2459a2">hello include</h1>
</body>
</html>
{% extends "base.html" %}
{% load staticfiles %}   # 先load 静态文件
{% block styles %}
    <style>
    h2{
        color:red;
    }
</style>
{% endblock %}

{% block content %}
    {{ block.super }}
    {% for student in student_list %}
        <h2>学生{{ student }}</h2>
    {% endfor %}
    {% include "test.html" %}  # 这样页面将在相应位置显示:hello include
{% endblock %}

标签:...,name,index,模版,request,视图,Django,html,block
From: https://www.cnblogs.com/zhlforhe/p/18013520

相关文章

  • 十、Django静态文件
    django网络相应基础:1、配置url路由在urls.py中urlpatterns添加路径fromdjango.conf.urlsimporturlfromdjango.contribimportadminfromapp01importviewsurlpatterns=[url(r'^admin/',admin.site.urls),url(r'^index.html$',views.index),......
  • 十一、Django url控制系统
    urlpatterns=[url(正则表达式,views视图函数,参数,别名),]匹配1、完全匹配urlpatterns=[url(r'^admin/',admin.site.urls),url(r'^showtime/',views.showtime),url(r'^blog/',include('blog.urls')),url(r'^logi......
  • 九、Django环境搭建(基于anaconda环境)
    Django特点:具有完整的封装,开发者可以高效率的开发项目,Django将大部分的功能进行了封装,开发者只需要调用即可,如此,大大的缩短了开发的时间,同时也因为太多封装导致开发灵活度和项目的运行效率不足。通常在工作中,开发者可以使用Django快速的搭建项目,然后基于项目进行个别部分的效率优......
  • Ubuntu服务器使用 Daphne + Nginx + supervisor部署Django项目
    视频:https://www.bilibili.com/video/BV1e6421G7uM/?vd_source=36191bed2c30378060ff2efe6831b331Django从3.0版开始加入对ASGI的支持,使Django开始具有异步功能。截止目前的5.0版,对异步支持逐步也越来越好,相信在未来的版本中异步将会支持的更加完善。所以说,我们也需要适时的......
  • python3.9+django4.1+vue3 ,后端项目运行时,报错了,WSGI application 'XXX.wsgi.applicat
    python3.9+django4.1+vue3,后端项目运行时,报错了; 报错信息,如下:django.core.exceptions.ImproperlyConfigured:WSGIapplication'StudentMgrBE.wsgi.application'couldnotbeloaded;Errorimportingmodule.     ------------------------------百度......
  • python django4.1 pycharm,报错,Conflicting 'xxx' models in application 'xxx': <
    遇到了一个报错,不知道咋么解决,pythondjango3pycharm,报错。不晓得怎么解决;Conflicting'xxx'modelsinapplication'xxx':<class'xxx'>and<class'xxx'>.这个是 报错误 信息,如下:RuntimeError:Conflicting'faculty'modelsin......
  • Django知识笔记1
    本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计RESTAPI,通过使用Django来实现一个RESTAPI为例,明确后端开发RESTAPI要做的最核心工作,然后介绍DjangoRESTframework能帮助我们简化开发RESTAPI的工作。Web应用模式在开发Web应用中,有两种应用模式:前后端不分离......
  • Django
    Django一、MTV和MVC的区别首先介绍Django的设计模式,也就是MTV,在这之前我们先了解MVC模式。1、MVC设计模式MVC是Model-View-Controller的缩写Model代表数据存储层,是对数据表的定义和对数据的增删改查;View代表视图层,是系统前段显示部分,它负责显示什么和如何进行显示;Controll......
  • SQL数据库入门03:数据库表的完整性约束、索引与视图的操作
      本文介绍基于MicrosoftSQLServer软件,实现数据库表完整性约束、索引与视图的创建、编辑与删除等操作的方法。(数据库基础(三):完整性约束、索引、视图)  系列文章中示例数据来源于《SQLServer实验指导(2005版)》一书。依据本系列文章的思想与对操作步骤、代码的详细解释,大家用......
  • DNS--智能地址解析(view视图)
    域名:xinenhui.comDNS服务器:192.168.198.128DNS1:192.168.198.129DNS2:192.168.198.146 1 简介使客户端就近访问DNS服务器来加速用户的访问速度 提高客户端体验不同的客户端使用同一个DNS服务器解析同一个域名得到不同的IP 2 修改主配置文件 设置view[root@localhost~]#vi......