Python之Django模板

Posted 栈了一堆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之Django模板相关的知识,希望对你有一定的参考价值。


在上一章节中我们使用
django.http.HttpResponse() 来输出" hello smart_wyn !"
该方式将数据与视图混合在一起,不符合 Django MVC 思想。

本章节我们将为大家详细介绍 Django 模板的应用,模板是一个文本,用于分离文档的表现形式和内容。

我们接着上一章节的项目将在 WeChat_public目录底下创建 templates 目录并建立 wyn.html文件,整个目录结构如下:


 

Python之Django模板


wyn.html


<html lang="en">
<head>
    <meta
charset="UTF-8">
    <title>
wyn templates</title>
</head>
<body>
<h1>
{{ wyn_arg }}</h1>
    <h2>
{{ wyn_arg }}</h2>
        <h3>
{{ wyn_arg }}</h3>
</body>
</html>

 

HTML模板中我们知道变量使用双括号展示。
接下来我们需要向Django说明模板文件的路径,
修改WeChat_public /settings.py
修改TEMPLATES 中的 DIRS
[BASE_DIR+"/templates",] ,如下所示:

 

settings.py:


TEMPLATES = [
  {
    
'BACKEND': 'django.template.backends.django.DjangoTemplates',
    
'DIRS': [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',
        
],
     
},
  
},
]

 

我们现在修改 views.py,增加一个新的对象,用于向模板提交数据:


from django.shortcuts import render

def v_1(request):
   message =
'hello smart_wyn ! this is a templates !'
  
return render(request, "wyn.html",{'wyn_arg':message})


可以看到,我们这里使用 render来替代之前使用的 HttpResponse
运行程序,访问 http://127.0.0.1:8000/hello,可以看到页面:

Python之Django模板


这样我们就完成了使用模板来输出数据,从而实现数据与视图分离。
接下来我们将具体介绍模板中常用的语法规则。
 
变量:

views.py:{"HTML变量名": "views变量名"
HTML:{{变量名}}
上面示例便是使用变量语法
 
列表:

templates 中的 wyn.html中,可以用 . 索引下标取出对应的元素。

views.py:


from django.shortcuts import render

def v_1(request):
   message = [
'hello smart_wyn !', 'this is a templates !']
  
return render(request, "wyn.html",{'arg_list':message})


wyn.html:


<html lang="en">
<head>
    <meta
charset="UTF-8">
    <title>
wyn templates</title>
</head>
<body>
<h1>
{{ arg_list }}</h1> {#取出整个列表 #}
   
<h2>{{ arg_list.0 }}</h2> {#取出列表第0个元素 #}

        <h3>{{ arg_list.1 }}</h3> {#取出列表第1个元素 #}

/body>
</html>

</html>

 

运行结果如下:


Python之Django模板

 

字典:

 

templates 中的 wyn.html中,可以用 . 取出对应的值。

views.py


from django.shortcuts import render

def v_1(request):
   message = {'name':'smart_wyn','age':18}
  
return render(request, "wyn.html",{'arg_dict':message})

 

wyn.html:


<html lang="en">
<head>
    <meta
charset="UTF-8">
    <title>
wyn templates</title>
</head>
<body>
<h1>
{{ arg_dict }}</h1> {#取出整个字典 #}
   
<h2>{{ arg_dict.name }}</h2> {#取出字典name的值 #}

        <h3>{{ arg_dict.age }}</h3> {#取出字典age的值 #}

/body>
</html>

</html>

 

运行结果如下:


Python之Django模板

 

if/else标签:

基本语法格式如下:
    {% ifcondition %}
         ... display
    {% endif%}
或者:
    {% ifcondition1 %}
        ... display 1
    {% elifcondition2 %}
        ... display 2
    {% else%}
        ... display 3
    {% endif%}
根据条件判断是否输出。if/else 支持嵌套。
 
{% if %} 标签接受 and or 或者 not 关键字来对多个变量做判断,或者对变量取反( not )。此处不做示例,可自行验证。

 

for 标签


基本语法格式如下:

    {% for %}

        ... display

    {% endfor %}

{% for %}允许我们在一个序列上迭代。 Python for 语句的情形类似,循环语法是 for i in a a 是要迭代的序列而 i 是在每一个特定的循环中使用的变量名称。

每一次循环中,模板系统会渲染在 {% for %}  {% endfor %} 之间的所有内容。
 
可以直接用字典 .items 方法,用变量的解包分别获取键和值。

 

views.py:


from django.shortcuts import render

def v_1(request):
   message = [{'name':'han mei mei','age':18},
           
{'name':'li lin','age':23},
           
{'name':'xiao hua','age':31}]
  
return render(request, "wyn.html",{'arg_dl':message})


wyn.html:


<html lang="en">
<head>
    <meta
charset="UTF-8">
    <title>
wyn templates</title>
</head>
<body>
% for i in arg_dl %}
    {%
if i.age <= 18%}
       
<h1>{{ i.name }} juvenile</h1>
   
{% elif i.age > 18 and i.age < 30%}
       
<h1>{{ i.name }} youth</h1>
   
{% else %}
       
<h1>{{ i.name }} middle aged</h1>
   
{% endif %}
{%
endfor %}

{%
for i,j in arg_dl.0.items %}
       
<h2>{{ i }} : {{ j }}</h2>
% endfor %}

/body>

</html>

</html>

 


运行结果如下:
  

Python之Django模板


<---------------- END -------------->




以上是关于Python之Django模板的主要内容,如果未能解决你的问题,请参考以下文章

3Python全栈之路系列之D

Django框架之模板层template的一些介绍和使用

Django之模板层

Python基础之 Django模板

如何在 Django 中显式重置模板片段缓存?

使用 Django 模板作为片段