django之模板

编程入门 行业动态 更新时间:2024-10-24 16:27:00

django之<a href=https://www.elefans.com/category/jswz/34/1770549.html style=模板"/>

django之模板

一、模板概念  

  1.django通过模板动态的生成HTML

  2.模板加载的位置(在setting.py中设置)

     DIRS决定模板路径的全局变量,APP_DIRS决定是否在应用目录中寻找模板

  3.模板引擎:Django框架常用Django模板引擎

二、模板变量

  1.语法:{{模板变量名}} 显示模板变量

  2.点语法访问复杂对象:

    字典,对象(无参方法,除了self参数),列表(Django模板引擎不支持负数索引)

  3.locals()函数返回一个字典,字典中包含的是当前局部变量的内容   

from django.shortcuts import renderdef go_login(request):return render(request,'login.html')
————————————————————————————————————————————————————————————————————————————————————————————————————————————
def login(request):
postdata = request.POST
print('接收到的请求数据类型:',type(postdata))
logname = postdata.get('logname')
logpaw = postdata.get('logpwd')
if logname == 'tom' and logpaw == '123456':
return render(request,'welcome.html',{'username':logname})
else:
return render(request,'login.html',{'msg':'用户名或密码输入错误'})


—————————————————————————————————————————————————————————————————————————————————————————————————————————
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<h3 style="color:red">{{ msg }}</h3>
<form action="/myapp/login/" method="post">
用户名:<input type="text" name="logname"><br>
密 码:<input type="password" name="logpwd"><br>
<input type="submit" value="登录">
</form>
</body>
</html>

-----------------------------------------------------------------------------------------------------------------
def pass_dict(request):
product_dict = {
'name': '雕牌洗衣粉',
'price': 12.4,
}
return render(request,'var/show_info.html',{'product':product_dict})

def pass_person(request):
per = Person('二傻',38)
return render(request,'var/show_info.html',{'person':per})

def pass_list(request):
fruits = ['苹果','香蕉','橘子']
return render(request,'var/show_info.html',{'fruits':fruits})

def pass_all(request):
product_dict = {
'name': '旺仔牛奶',
'price': 18,
}
per = Person('二傻', 38)
fruits = ['苹果', '香蕉', '橘子']
return render(request,'var/show_info.html',locals())


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>显示点语法访问模板变量</title>
</head>
<body>
<h3>商品名称(接收字典变量):{{ product.name }}</h3>
<h3>商品价格(接收字典变量):{{ product.price }}</h3>
<h3>人的姓名(接收类变量):{{ person.name }}</h3>
<h3>人的年龄:{{ person.age }}</h3>
<h3>人的动作:{{ person.say }}</h3>
<h3>水果列表:{{ fruits.1 }}</h3>
<h3>水果列表:{{ fruits.0 }}</h3>

<h3>商品名称(接收字典变量):{{ product_dict.name }}</h3>
<h3>商品价格(接收字典变量):{{ product_dict.price }}</h3>
<h3>人的姓名(接收类变量):{{ per.name }}</h3>
<h3>人的年龄:{{ per.age }}</h3>
<h3>人的动作:{{ per.say }}</h3>
<h3>水果列表:{{ fruits.1 }}</h3>
<h3>水果列表:{{ fruits.0 }}</h3>

</body>
</html>

 

 

 

三、模板标签

 1.if 标签  

  1.1简单if标签

 

  {% if 布尔值 %}  布尔值为True时,显示的内容

 

  {% else %}  布尔值为False时,显示的内容

 

  {% endif %} 注意:可以在if后添加and、or、not,逻辑判断符号。判断是否相等,使用"=="符号。

 

2.多分支if标签:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>if标签</title>
</head>
<body>{% if score >= 90 %}<h3>优秀</h3>{% elif score >= 80 %}<h3>良好</h3>{% elif score >= 70 %}<h3>一般</h3>{% elif score >= 60 %}<h3>及格</h3>{% else %}<h3>留级</h3>{% endif %}
</body>
</html>

--------------------------------------------------------------------------------------------------------
def show_info(request,score):
try:
score = float(score)
except:
score = 0
return render(request,'tag/if_demo.html',locals())

 

 

3.for标签 

  3.1.{% for 循环变量 in 循环序列 %}

       {{ 循环变量 }}

       {% empty %}

    如果循环序列为空,执行此处

       {% endfor %}

       注意:使用for标签循环时,有一个forloop模板变量,用来记录当前循环进度的。

      3.2      forloop的常用属性:counter、first、last。

  如果要进行反向循环,则在for标签的循环序列后加上reversed。

  用法举例:

    forloop.last 是一个布尔值;在最后一次执行循环时被置为True。一个常见的用法是在一系列的链接之间

    放置管道符(|)

    {% for link in links %}{{ link }}

    {% if not forloop.last %} | {% endif %}

    {% endfor %}

    另一个常见的用途是为列表的每个单词的加上逗号

    {% for p in places %}

    {{ p }}

    {% if not forloop.last %}, {% endif %}

    {% endfor %}

  

def show_list(request):countries = ['中国','美国','俄罗斯','法国',]#countries = []navs = ['首页','推荐','西安','抖音','娱乐',]return render(request, 'tag/for_demo.html', locals())

---------------------------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>for标签</title>
</head>
<body>
<ul>
{% for country in countries reversed %}
<li>{{ country }}</li>
{% endfor %}
<hr>
{% for nav in navs %}
{{ nav }}
{% if not forloop.last %}
|
{% endif %}
{% endfor %}
</ul>
</body>
</html>

 

  

 3.include标签

   include标签常用来包含那些固定不变的模板

   {% include '包含的模板地址' %}

def go_include(request):return render(request,'tag/inlcude_demo.html')

-----------------------------------------------------------------------------------------------------

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
欢迎访问我的网站 <br>
这是网站的主题内容 <br>
…… <br>
<br>
{% include 'tag/footer.html' %}
</body>
</html>

----------------------------------------------------------------------------------------------------------------------
footer.html文件

友情链接:
<a href="htts//www.baidu">百度</a>
<a href="htts//www.360">360</a>
<a href="htts//www.sohu">搜狐</a>
<a href="htts//www.sougou">搜狗</a>



 

 

  4.模板继承标签  

  父模板(基模板)提前定义若干个block块标签,子模板可以继承、重写、添加父模板block块中的内容。

  子模板通过{% extends '父模板位置' %}继承父模板。

  父模板使用

  {% block 块名称 %}

  {% endblock %}

  进行“挖坑”,子模板“填坑”。

  子模板如果想要在父模板的某个块中添加内容,则先要使用{{ block.super }}获取父模板中该块的内容。

  

def go_child(request):return render(request,'tag/child.html',{'info':'西安将会是国际化大农村'})

-------------------------------------------------------------------------------------------
parent.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<h3>西安市委官方网站</h3>
{% block content %}

{% endblock %}

{% block slogon %}
<h3>为人民服务</h3>
{% endblock %}

<hr>
以下是视图函数view传递过来的数据:
{{ info }}

</body>
</html>

_________________________________________________________________________________________________________
child.html
{% extends 'tag/parent.html' %}

{% block title %}
西安欢迎你
{% endblock %}

{% block content %}
市委书记:王永康 <br>
市委副书记:暂无 <br>
其他人员。。。 <br>
{% endblock %}

{% block slogon %}
{{ block.super }}
<h3>加油,加油</h3>
{{ block.super }}
{% endblock %}

 

 

四、模板过滤器

  1.作用:在变量显示之前修改他的值

   2.使用方法:模板变量后面添加管道符|,管道符后是过滤器名称

   3.常用模板过滤器:

  3.1. length 获取模板变量对应值的长度

  3.2.first 获取第一个元素

  3.3.upper 变为大写

  3.4.lower 变为小写

  3.5.truncatewords:"字符数" 截取指定数量的字符,该过滤器需要参数

  3.6.date 显示日期,该过滤器需要参数,eg: date:"Y-m-d H:i:s"

  3.7.addslashes 在单引号、双引号、反斜线前添加斜线

  3.8.add:"添加的数字" 在模板变量上添加指定的数据

def show_filter(request):s = 'hello django,hello world ,hello python'num = 100say = 'He said:"you are stupid!"'t = datetime.now()info = '<h3>这是传递的infoxinxi</h3>'return render(request,'filter/fileter_demo.html',locals())

-------------------------------------------------------------------------------------------------------------
filter_demo.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>演示模板过滤器</title>
</head>
<body>
<h3>传递的字符串的长度:{{ s|length }}</h3>
<h3>传递的字符串首字母大写:{{ s|capfirst }}</h3>
<h3>连续调用过滤器使首字母大写{{ s| first|upper}}</h3>
<h3>选取前1个单词:{{ s| truncatewords:'5'}}</h3>
<h3>选取前1个单词:{{ s| truncatechars:'5'}}</h3>
<h3>当前时间:{{ t|date:'Y-m-d H:i:s' }}</h3>
<h3>addslashes过滤器{{ say|addslashes }}</h3>
<h3>给变量添加5:{{ num|add:5 }}</h3>
<h3>未加safe过滤器{{ info }}</h3>
<h3>添加加safe过滤器{{ info |safe}}</h3>
</body>
</html>

 

 

  4.自定义过滤器

  自定义过滤器的步骤:

    4.1.在app目录下建立templatetags包(包含__init__文件),并在此包下建立自己的过滤器模块(例如:myfilter.py)

    4.2.在自定义的过滤器模块中编写:

    from django import template

    register = template.Library()

    并使用装饰器@register.filter装饰一个函数,这个函数就是过滤器的具体调用,第一个参数是传递过来的模板变量;如果需要对该过滤器设置参数,还需要传递第二个参数

    4.3.在模板中加载过滤器模块  {% load myfilter %}

   

自定义的过滤器

from django import templateregister = template.Library() #该对象可以用来注册模板过滤器 @register.filter(name='Chinese_upper') def number_to_upper(value,s):try:return ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'][value] + '\t' + sexcept:return '参数有误'
----------------------------------------------------------------------------------------------------

<!DOCTYPE html>
{% load myfilter %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义过滤器</title>
</head>
<body>
{{ num|Chinese_upper:"李逼 "}}
</body>
</html>
 ----------------------------------------------------------------------------------------------------------------------
def show_custom_filter(request,num):
return render(request,'filter/custom_filter.html',locals())

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
from django import template


register = template.Library() #该对象可以用来注册模板过滤器


@register.filter(name='dictfilter')
def get_dict_value(value,key):
return value[key]

---------------------------------------------------------------------------------------------------------------
def show_values(request):
mydict={
'sport':'football',
'fruit':'apple',
}
return render(request,'values.html',locals())

---------------------------------------------------------------------------------------------------------------
 
<!DOCTYPE html>
{% load myfilter1 %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义模板过滤器</title>
</head>
<body>
key为sport的值为{{ mydict|dictfilter:'sport' }}<br>
key为fruit的值为{{ mydict|dictfilter:'fruit' }}<br>
</body>
</html>
  

 

转载于:.html

更多推荐

django之模板

本文发布于:2024-03-10 18:07:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1728668.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模板   django

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!