以HTML格式显示存储在数据库中的时间(django)

时间:2017-04-27 20:20:37

标签: html django templates

我正在使用Django建立一个巴士预订网站。用户填写From,To,Bus类型(普通或沃尔沃)和日期。结果显示该特定日期该路线上可用的公交车。我制作了三张桌子 - 巴士,路线和频率。您可以在此处查看我的models.py和views.py - https://dpaste.de/Oi6a我将日期转换为一周中的相应日期。我已经过滤了总线,但是,我想在模板上显示时间。这是我的views.py代码的一部分:

def select(request):

    bus_type = request.GET.get('bus_type')
    bus_from = request.GET.get('bus_from')
    bus_to = request.GET.get('bus_to')

    date_string = request.GET.get('date')
    date = datetime.strptime(date_string, '%Y-%m-%d')

    day = calendar.day_name[date.weekday()]

    kwargs = { '{0}__range'.format(day): ["00:00:00", "23:59:59"],}


    qs = Frequency.objects.filter(bus__type_of_bus=bus_type, bus__route__location_from=bus_from, bus__route__location_to=bus_to, **kwargs)

    context = {'qs': qs, 'date':date_string,}
    template = 'select.html'
    return render(request, template, context)

正如您所见,qs过滤了可用的总线,然后传递给模板。这是模板的一部分:

<div id="pricing-table" class="clear">
    {% for info in qs %}
    <div class="price_block">
        <h3>{{ info.bus.type_of_bus }}<span>{% if info.bus.type_of_bus == 'Volvo' %} Rs 550 {% else %}Rs 330 {% endif %}</span></h3>
        <a href="{% url 'book:seats' %}"rel="follow" rel="noreferrer" class="signup" type="submit">Book</a>
        <ul>
            <li><b>Bus Number -</b> {{ info.bus.bus_number }}</li>
            <li><b>Route -</b> {{ info.bus.route }}</li>
            <li><b>Date -</b> {{ date }}</li>
            <li><b>Time -</b> {{ info.day }}</li>
        </ul>
    </div>

在这个HTML文件的最后一行,我添加了info.day。我想要的是,这显示了公共汽车在给定的一天运行的时间。例如,如果一个人在4月29日搜索公共汽车。 4月29日将转换为相应的日期,即星期五。频率表具有'星期一','星期二','星期三','星期四','星期五','星期六'和'星期日'作为属性,这些都是TimeField()。 qs过滤总线并传递给模板。我希望{{info.day}}显示公交车运营的时间。相反,它什么也没有显示。但是当我将{{info.day}}更改为{{info.Friday}}时,它会开始显示时间。每次搜索公交车时,如何在{{info。(here)}}中显示时间而不必手动更改日期。我没说清楚,但我希望你能理解。如果你不这样做,请告诉我。

1 个答案:

答案 0 :(得分:1)

您可以创建自定义模板标记,为您和模型上的方法执行此操作。

我还没有测试过这段代码,但这可以使用或不使用小的调整

将此方法添加到Frequency模型:

def get_day_info(self, date):
        # Where date_string would be a datestring
        date = datetime.strptime(date_string, '%Y-%m-%d')
        day = calendar.day_name[date.weekday()]
        info_time = getattr(self, '{}'.format(day))
        return info_time

并将其注册为模板标签。

@register.simple_tag
def get_day_info(info, date):
    return info.get_day_info(date)

您可以在模板中调用它:

<li><b>Time -</b> {% get_day_info info {{ date }} %}</li>