当前位置: 首页 > news >正文

在 Django 模板中渲染并行数组

在 Django 模板中渲染并行数组通常涉及使用模板语言中的循环结构来遍历和展示数组中的每个元素。假设你有一个名为 items 的数组,你可以按照以下方式在 Django 模板中渲染它:

在这里插入图片描述

<ul>{% for item in items %}<li>{{ item }}</li>{% endfor %}
</ul>

在这个例子中,items 是一个 Python 列表,它会在模板中被展开并显示每个元素。每次迭代循环时,变量 item 将代表数组中的一个元素,并通过 {{ item }} 的方式插入到 HTML 中。

如果 items 是一个包含字典或对象的列表,你可以使用点表示法访问它们的属性。例如,如果 items 是一个包含对象的列表,每个对象有一个 name 属性,可以这样访问:

<ul>{% for item in items %}<li>{{ item.name }}</li>{% endfor %}
</ul>

这种方法使得在 Django 模板中展示和渲染多个数组元素非常方便和灵活。

1、问题背景

在使用 Django 渲染模板时,有时需要同时渲染两个数组的数据,一个数组是需要输出的数据,另一个数组是用于删除项的表单集。由于 Django 不支持在模板标签中使用布尔运算符,直接将这两个数组打包在一起可能会导致只渲染第一个项目和第一个表单。因此,需要一种方法将这些项目打包在一起,以便在同一个 for 循环中渲染它们。

2、解决方案

可以使用 Python 内置的 zip 函数来解决这个问题。zip 函数可以将多个可迭代对象打包成一个元组的列表,其中每个元组包含这些可迭代对象中相应位置的元素。

在视图中,可以使用以下代码将 post 数组和 delpostformset.forms 数组打包在一起:

post_and_form = zip(post, delpostformset.forms)

然后在模板中,可以使用以下代码来渲染打包后的数组:

{% for post, form in post_and_form %}
{% endfor %}

这样,就可以在一个 for 循环中渲染这两个数组的数据了。

以下是一个完整的示例代码:

视图

from django.shortcuts import render_to_response
from django.template import RequestContext
from forum.models import forum, UserProfile
from django.contrib.auth.decorators import login_required
from forum.forms import PostForm, PostDeleteForm, ReadForumForm
from django.forms.models import modelformset_factory@login_required
def forums(request ):post = list(forum.objects.filter(child='0') & forum.objects.filter(deleted='0'))user = UserProfile.objects.get(pk=request.session['_auth_user_id'])newpostform = PostForm(request.POST)deletepostform = PostDeleteForm(request.POST)DelPostFormSet = modelformset_factory(forum, exclude=('child','postSubject','postBody','postPoster','postDate','childParentId'))readform = ReadForumForm(request.POST)if newpostform.is_valid():topic = request.POST['postSubject']poster = request.POST['postPoster']newpostform.save()newpostform = PostForm(initial = {'postPoster':user.id})post = list(forum.objects.filter(child='0') & forum.objects.filter(deleted='0'))else:newpostform = PostForm(initial = {'postPoster':user.id})if request.method == 'POST':delpostformset = DelPostFormSet(request.POST)if delpostformset.is_valid():delpostformset.save()else:delpostformset = DelPostFormSet(queryset=forum.objects.filter(child='0', deleted='0'))post_and_form = zip(post, delpostformset.forms)return render_to_response('forum.html', {'post': post_and_form, 'newpostform': newpostform, },  context_instance=RequestContext(request))

模板

<table class="results">
<tr class="inner_results_header"><td >Title</td><td>Date/Time</td><td>Poster</td>      <td>Body</td><td><form method="post" id="form" action=""  class="usertabs accfrm"><input type="submit" value="Delete" /></td></tr>  
{{formset.management_form}}
{% for post, form in post   %}{% url forum_view p.postID  as post_url%} 
<tr  class="inner_results {% if forloop.counter|divisibleby:2 %}evens{% else %}odds{% endif %}"><span onclick="document.location.href='{{post_url}}';"><td>{{ p.postSubject}}</td><td>{{p.postDate}}</td><td>{{ p.postPoster}}</td><td>{{ p.postBody|truncatewords:50}}</td></span><td>{{ form.as_p }}</td></tr> {% endfor %}<tr class="inner_results_header"><td >Title</td><td>Date/Time</td><td>Poster</td> <td>Body</td><td><input type="submit" value="Delete" /></form></td></tr>  

这样,就可以在 Django 模板中渲染并行数组了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Es6常用的一些数组处理方法
  • JetBrains:Wrong tag。注释告警
  • 代码随想录算法训练营第三十天 | 贪心算法 part04
  • Python接口自动化测试框架(实战篇)-- Jenkins持续集成
  • PXE+Kickstart自动化安装操作系统
  • 荒原之梦考研:考研二战会很难吗?
  • 二十八、【人工智能】【机器学习】【PyTorch】- 手写体识别
  • 下一个排列
  • FFmpeg有理数相关的源码:AVRational结构体和其相关的函数分析
  • 英伟达显卡查看占用情况
  • 设计模式实战:报表生成系统的设计与实现
  • Chapter 22 数据可视化——折线图
  • Chapter 26 Python魔术方法
  • 用phpstudy搭建MySQL数据库
  • WebKit 的简介及工作流程
  • Centos6.8 使用rpm安装mysql5.7
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Java基本数据类型之Number
  • Netty 4.1 源代码学习:线程模型
  • storm drpc实例
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • tensorflow学习笔记3——MNIST应用篇
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue-loader 源码解析系列之 selector
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 好的网址,关于.net 4.0 ,vs 2010
  • Java性能优化之JVM GC(垃圾回收机制)
  • raise 与 raise ... from 的区别
  • 交换综合实验一
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Python第六天)文件处理
  • (定时器/计数器)中断系统(详解与使用)
  • (回溯) LeetCode 78. 子集
  • (九)信息融合方式简介
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (四)图像的%2线性拉伸
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET 的程序集加载上下文
  • .net 获取某一天 在当月是 第几周 函数
  • .Net6使用WebSocket与前端进行通信
  • .NET程序员迈向卓越的必由之路
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET企业级应用架构设计系列之开场白
  • @31省区市高考时间表来了,祝考试成功
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @SentinelResource详解
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [Algorithm][综合训练][体育课测验(二)][合唱队形][宵暗的妖怪]详细讲解
  • [Android]常见的数据传递方式