Django模板-如何在变量上运行方法?

时间:2020-07-16 16:14:58

标签: django django-templates django-template-filters

我是Django的新手,所以也许我的尝试纯属异端;)

我正在尝试查看列出不负责任的会议室及其属性的视图,包括可用性。 我有2个模型:<input id="waffe1c.0."> <input id="waffe1c.1."> <input id="waffe1c.2."> <input id="waffe1c.3."> <input id="waffe1c.4."> <input id="waffe1c.5."> <input id="waffe1c.6."> <input id="waffe1c.7."> <input id="waffe1c.8.">Room。我想在视图中有一列来说明在显示页面的那天房间是否可用。

我的Reservation

models.py

我的from django.utils import timezone from django.db import models class Room(models.Model): name = models.CharField(max_length=255, unique=True) capacity = models.IntegerField() projector = models.BooleanField() class Reservation(models.Model): room = models.ForeignKey(Room, on_delete=models.CASCADE) date = models.DateField() comment = models.CharField(max_length=255) class Meta: unique_together = ('room', 'date',)

views.py

我的模板:

class ShowRoom(View):
    def get(self, request):
        rooms = Room.objects.all()
        time_now = timezone.now().date()
        context = {
            'rooms': rooms,
            'time_now': time_now
        }
        return render(request, 'rooms/list_rooms.html', context)

一切正常,我只需要用代码替换此{% extends 'rooms/base.html' %} {% block block_title %} Home {% endblock %} {% block block_content %} {% if rooms %} <table class="table"> <thead> <td> Name </td> <td> Capacity </td> <td> Available </td> <td> Projector </td> </thead> <tbody> {% for room in rooms|dictsort:'capacity' %} <tr> <td> <a href="{% url 'rooms:detail_room' room_pk=room.pk %}">{{ room.name }}</a> </td> <td> {{ room.capacity }} </td> <td> Available? </td> <td> {{ room.projector|yesno:'yes,no' }} </td> </tbody> {% endfor %} </table> {% else %} <h1> You have no registered rooms yet. </h1> {% endif %} {% endblock %} 行,该代码将根据现有的房间预订显示“免费”或“已入住”。

我发现也许我应该编写一个自定义过滤器。

这是我的过滤器:

 <td>  Available? </td>

(我想先使其运行,然后使其显示“免费”或“已占用”。)

我已添加到模板from django import template from rooms.models import Room, Reservation register = template.Library() @register.filter def check_reservation(queryset, now): return queryset.filter(date=now) 中,并替换了我要更改的行

{% load my_extras %}

输出为:

/ room / [<'time_now'值中的

ValidationError具有无效日期 格式。它必须为YYYY-MM-DD格式。“]

在添加过滤器之前,我正在外壳中尝试此解决方案,并且该解决方案一直有效。

我不知道过滤器是否有问题,或者我尝试从错误的角度解决问题。

提前感谢您的提示。

1 个答案:

答案 0 :(得分:1)

尝试向Room类添加另一个字段:

2017 SEP 10 10:15:27 - closest value in list : 2017 SEP 10 08:50:09
2017 SEP 10 10:20:22 - closest value in list : 2017 SEP 10 08:50:09

在视图中,您可以检查与预订关联的日期和今天的日期。

occupied = model.BooleanField(default=False)

然后您可以过滤可用和不可用的房间。

if reservation.date == time_now:
  room.occupied = true

在模板中:

rooms_occupied = room.objects.filter(occupied=True)
rooms_available = room.object.filter(occupied=False)