Django & Python: создание расписания - PullRequest
2 голосов
/ 09 января 2020

Я пытаюсь использовать Django для создания расписания. Я попытался реализовать это с помощью Python, это выглядит так:

durations = [30, 30, 45] #lessons with various durations
count=0
start_time = 9
for x in durations:
    count = count + x/60
    end_time = count + start_time
    print(end_time)

Вывод:

9.5   # 09:30
10.0  # 10:00
10.75 # 10.45

Мой Django шаблон:

    {% for student in students %}
    <tr>
        <td>{{forloop.counter}}</td>
        <td>{{ student.first_name }}&nbsp;{{ student.last_name }}</td>
        <td>{{ student.duration }} mins</td>

        <! Stuck here: start time and end time ––> 
        <td>Start Time - End Time</td>
    </tr>
    {% endfor %}

Моя цель - получить таблицу, подобную этой:

Student A | 30 mins | 09:00 - 09:30
Student B | 30 mins | 09:30 - 10:00
Student C | 45 mins | 10:00 - 10:45

Существуют фильтры для выполнения математических операций, таких как «add» и «sub», но, похоже, мы не можем сделать что-то вроде «x = x + 1». «?

Есть идеи? Большое спасибо!

1 Ответ

1 голос
/ 09 января 2020

Вместо того, чтобы делать вычисления в шаблоне, вы должны сделать это в виду. Вот решение Pythoni c, которое можно использовать (см. Комментарии к коду для объяснения):

# view

from datetime import datetime, timedelta

def your_view(request):
    students = list(Student.objects.all()) # DB hit once only
    count=0
    start_time = datetime.now().replace(hour=9,second=0,microsecond=0,minute=0)  # getting start time at 9 am
    for s in students:  # no more DB hits as query is already evaluated
        s.start = start_time.strftime('%H:%M')  # using strftime to get string from datetime object
        start_time += timedelta(minutes=s.duration)  # adding timedelta of duration to increase start time
        s.end = start_time.strftime('%H:%M')
    return render(request, 'template.html', {'students':students})

# template

{% for student in students %}
    <tr>
        <td>{{forloop.counter}}</td>
        <td>{{ student.first_name }}&nbsp;{{ student.last_name }}</td>
        <td>{{ student.duration }} mins</td>
        <td>{{ student.start }} - {{ student.end }}</td>
    </tr>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...