首页 > 解决方案 > 如何将查询集中的对象呈现给 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,但不知道该怎么做。我非常感谢您的帮助。:)

标签: 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>
...

并且您的模型NewEvent具有字段dateschedule然后在您的模板中使用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真的是DateFieldor ,您可以使用日期过滤器DateTimeField在模板中将其格式化为您的需要:

{{ event.date|date:"YYYY-mm-dd" }}

这不是问题的一部分,但最终会在将事件分类到日历时弹出:如果每天有超过 1 个事件怎么办?

在这种情况下,如果dateDateTimeFieldor DateField,则覆盖ListView 的get_queryset注释日期(可能还有时间),然后对其使用重组过滤器以每天获取单独的子列表。


推荐阅读