django - 如何将查询集中的对象呈现给 Django 模板中的不同标签?
问题描述
所以我试图用 Django 做一个简单的调度程序,但后来卡住了。我有以下代码。
...
<td class="myClass" data-date="2020-05-15">
<div class="myContent">today's schedule comes here</div>
</td>
<td class="myClass" data-date="2020-05-16">
<div class="myContent">today's schedule comes here</div>
</td>
...
我有一个单独的模型,其中每个对象都有两个字段 - date
(datefield) 和schedule
(CharField)。假设用户每天只能放置一个时间表。
例如,如果数据是[{"date":"2020-05-15", "schedule":"Read books"}, {"date":"2020-05-16", "schedule":"Do laundry"}]
,我如何将每个时间表分配给每个日期?
我想我能够使用下面的views.py 中的查询来获取对象,但是在将每个数据(计划)渲染到模板中的每个相应日期时遇到了困难。
from .models import NewEvent
def SchedulePage(request):
eachDay = NewEvent.objects.all()
return render(request, 'schedule.html', {'eachDay':eachDay})
我相信我必须在这里使用 JQuery,但不知道该怎么做。我非常感谢您的帮助。:)
解决方案
如果您的最终结果是这个标记:
...
<td class="myClass" data-date="2020-05-15">
<div class="myContent">today's schedule comes here</div>
</td>
<td class="myClass" data-date="2020-05-16">
<div class="myContent">today's schedule comes here</div>
</td>
...
并且您的模型NewEvent
具有字段date
,schedule
然后在您的模板中使用for 循环生成标记:
{% for event in object_list %}
<td class="myClass" data-date="{{ event.date }}">
<div class="myContent">{{ event.schedule }}</div>
</td>
{% endfor %}
编写视图的一种简单方法是:
public class NewEventListView(ListView):
model = NewEvent
其余的是与ListView的约定。您可以覆盖在模板中调用列表的方式,按照惯例它是object_list
.
如果date
真的是DateField
or ,您可以使用日期过滤器DateTimeField
在模板中将其格式化为您的需要:
{{ event.date|date:"YYYY-mm-dd" }}
这不是问题的一部分,但最终会在将事件分类到日历时弹出:如果每天有超过 1 个事件怎么办?
在这种情况下,如果date
是DateTimeField
or DateField
,则覆盖ListView 的get_queryset以注释日期(可能还有时间),然后对其使用重组过滤器以每天获取单独的子列表。
推荐阅读
- laravel - 来自数据库中数组的 Laravel 关系
- php - Php:为 cookie 属性设置标头 SameSite=None;Secure 根本不起作用
- c++ - 数组作为映射键
- python - 处理嵌套 if/else 和 while 的 Pythonic 方式
- node.js - 我是否需要将有效负载传递给此代码以生成 JWT 令牌?
- javascript - 取消对 javascript 的提问
- javascript - React - 在点击时显示已经分配了功能的加载器
- r - 从列表中的数据框中提取不同的行集
- amazon-web-services - 使用 terraform 的 AWS ECS 容量提供程序
- reactjs - WebStorm 测试快捷方式