Django模板遍历字典的方法

使用Python + Django做Web开发时,有时需要在view中传递一个字典给模板(template),如何在模板中遍历字典呢?

下面介绍两种方法:

views.py代码如下:

dicts = {"key1": 1, "key2": 2, "key3": 3, }
return render_to_response("index.html",{"dicts":dicts,},context_instance = RequestContext(request))

1.第一种遍历方法:

index.html代码如下:

{% for key,value in dicts.items %}
  <tr class="{% cycle ‘altrow‘ ‘‘ %}">
    <td>{{ forloop.counter }}</td>
    <td>{{ key }}</td>
    <td>{{ value }}</td>
  </tr>
{% endfor %}

这种方法遍历字典,简单明了,但由于字典是无序的,  不能满足特定的要求,如:首先输出key2,在输出key1,key3。要做到这点就需要使用第二种方法。

2. 第二种使用自定义过滤器

1):首先自定义过滤器:

Django的app包的合适位置创建一个templatetags包,它应该和models.py,
  views.py等在同一级,例如:

polls/  
        models.py  
        templatetags/  
        views.py

添加两个文件到templatetags包(即该目录下),一个__init__.py文件(来告诉Python这是一个包含Python代码的模块)和一个包含你的自定义的标签/过滤器定义的文件,后者的文件名是你将在后面用来载入标签的名字,例如,如果你的自定义标签或者过滤器在一个叫myfilter.py文件里,你可以在模板里做下面的事情:
myfilter.py代码如下:

from django import template  

register = template.Library()  

def key(d,key_name):
    value = 0
    try:
      value = d[key_name]
   except KeyError:
      value = 0
   return value

模板index.html代码如下:

<tr class="altrow">
  <td>1</td>
  <td>key2</td>
  <td>{{ dicts|key:"key2" }}
  </td>
</tr>
<tr>
  <td>2</td>
  <td>key1</td>
  <td>{{ dicts|key:"key1" }}
  </td>
</tr>
<tr class="altrow">
  <td>3</td>
  <td>key3</td>
  <td>{{ dicts|key:"key3" }}</td>
</tr>

 

时间: 2024-12-19 07:31:43

Django模板遍历字典的方法的相关文章

Django -- 模板

一切伟大的行动和思想,都有一个微不足道的开始:   -- 徐志摩<励志天下> 一切能忍受的微不足道,都有一个行动思想在脚下.   -- 小QQ <励志自己> ------------------------------------------------------------------------------------------------------ 前一节,我们把HTML直接硬编码在python中,尽管他便于解释使徒的工作原理,但是却不是一个好主意: 1.对页面设计进行

在 Django 模板中遍历复杂数据结构的关键是句点字符

在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ time.year }}

Django模板如何用一个变量查找字典值

mydict = {"key1":"value1", "key2":"value2"} 在Django模板中查找字典值的常规方法是{{mydict.key1}},{{mydict.key2}}.如果键是循环变量怎么办?即: {% for item in list %} # list中元素,都有一个NAME属性 {{ mydict.item.NAME }} # 取出字典中相对应的NAME属性的key对应的value {% end

django模板中的extends和include使用方法

一.extends使用方法 首先extends也就是继承,子类继承父类的一些特性.在django模板中通过继承可以减少重复代码. 首先我们建立一个app,名字叫做hello.别忘了在settings.py中的INSTALLED_APPS注册这个app.不注册会出现hello目录下的templates中的模板无法调用. 1.在根目录下的templates创建base.html <!DOCTYPE html> <html lang="en"> <head>

for 循环遍历字典中的键值两种方法

一.先获取key,然后通过dic[key]获取value import time dict = {'山东':'济南','河南':'郑州','江苏':'南京'} for key in dict: print(key) print(key,dict[key]) time.sleep(1) 江苏江苏 南京山东山东 济南河南河南 郑州 (python中的字典的无序的,所以输出时不按照顺序) 二.对字典items()方法返回的元组列表进行序列解包 import time dict = {'山东':'济南'

Django模板1

上一篇中带参数的URLconf虽然可以做到传参动态显示内容,但是最终现实的内容还是硬编码到Python代码中的 1 def hours_ahead(request,phours): 2 try: 3 phours = int(phours) 4 except VauleError: 5 raise Http404() 6 7 dt = datetime.datetime.now() + datetime.timedelta(hours=phours) 8 html = "<html>

Django模板系统(非常详细)(后台数据如何展示在前台)

前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的这会导致几个问题:1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便2,其次,写后台Python代码与设计HTML是不同的工作,更专业的Web开发应该将两者分开页面设计者和HTML/CSS程序员不应该编辑Python代码,他们应该与HTML打交道3,程序员写Python代码同时页面设计者写HTML模板会更高效,而不是一个人等待另一

Django模板系统详解

你可能已经注意到我们在例子视图中返回文本的方式有点特别.也就是说,HTML被硬性地直接写入 Python代码之中. 这种处理会导致一些问题: § 对页面设计的进行任何改变都必须对 Python代码进行相应的修改.站点设计的修改往往比底层Python代码的修改要频繁得多,因此如果可以在不进行 Python代码修改的情况下变更设计,那将会方便得多. § Python代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成.设计人员和 HTML

Django项目实践2 - Django模板

http://blog.csdn.net/pipisorry/article/details/45061511 上篇:Django项目实践1 - 创建Django项目 Django模板 {视图和模板对逻辑和显示进行了分隔} 上面是使用 django.http.HttpResponse() 来输出"Hello World!".该方式将数据与视图混合在一起,不符合Django的MVC思想.或者HTML被直接硬编码在 Python 代码之中. html = "<html>