我正在使用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)}}中显示时间而不必手动更改日期。我没说清楚,但我希望你能理解。如果你不这样做,请告诉我。
答案 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>