Estoy construyendo un sitio web de reserva de autobuses usando Django. Los usuarios completan Desde, Hasta, Tipo de autobús (ordinario o Volvo) y fecha. Los resultados muestran los autobuses disponibles en esa ruta en esa fecha en particular. Hice tres tablas: autobús, ruta y frecuencia. Puede consultar mis models.py y views.py aquí: https://dpaste.de/Oi6a Convierto la fecha al día correspondiente de la semana. He filtrado los autobuses. Sin embargo, quiero mostrar el tiempo en la plantilla. Esto es parte de mi código 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)Como puede ver, qs filtra los buses disponibles y luego se pasa a la plantilla. Esta es una parte de la plantilla:
<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>En la última línea de este archivo HTML, he agregado info.day. Lo que quiero es que esto muestre la hora en que opera el autobús en el día dado. Por ejemplo, si una persona registra un autobús el 29 de abril. El 29 de abril se convertirá en el día correspondiente, es decir, el viernes. La tabla de frecuencia tiene 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado' y 'domingo' como atributos y todos estos son TimeField(). qs filtra los buses y pasa a la plantilla. Quiero que {{ info.day }} muestre la hora en que opera el autobús. En cambio, no muestra nada. Pero cuando cambio {{ info.day }} a {{ info.Friday}}, comienza a mostrar la hora. ¿Cómo puedo mostrar la hora sin tener que ir manualmente y cambiar el día en {{ info.(here) }} cada vez que busco un autobús? No lo dejé muy claro, pero espero que lo entiendas. Avísame si no lo haces.
Puede crear una etiqueta de plantilla personalizada que haga esto por usted y un método en el modelo.
No he probado este código, pero debería funcionar con o sin pequeños ajustes.
Agregue este método al modelo de 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_timeY registre esto como una etiqueta de plantilla.
@register.simple_tag def get_day_info(info, date): return info.get_day_info(date)Lo llamarías en la plantilla así:
<li><b>Time -</b> {% get_day_info info {{ date }} %}</li>