Hallo zusammen,
ich möchte eine kleine Website generieren mit 4 Spalten. (Name, Startzeit, verbleibende Zeit, sonstige Infos)
Die Startzeit enthält immer nur den Wochentag und Uhrzeit, es handel sich um Ereignisse, die sich wöchentlich wiederholen. Die verbleibende Zeit soll die Differenz der aktuellen Zeit zur nächsten Startzeit, der jeweiligen Zeile, anzeigen. Anfangs hatte ich sofort die Anzeige Invalid Date, mittlerweile werden die Sekunden in allen 3 Zeilen schon angezeigt, allerdings wird dort nichts herunter gezählt. Als Endergebnis wär es schön wenn dort die verbleibenden Tage, Stunden, Minuten und Sekunden angezeigt werden, aktuell wär ich mit sich verringernden Sekunden aber schon zu frieden. Mit JS komm ich nicht wirklich zurecht, deshalb wollte ich dort nicht zu viel erstmal einbauen.
from flask import Flask, render_template
import datetime
#import time
import toml
app = Flask(__name__)
data = toml.load("data.toml")
def weekday_mapping(weekday):
weekdays = {
"Monday": 0,
"Tuesday": 1,
"Wednesday": 2,
"Thursday": 3,
"Friday": 4,
"Saturday": 5,
"Sunday": 6,
}
return weekdays[weekday]
def get_remaining_time(date_string):
weekday = date_string.split()[0]
time_ = date_string.split()[1].split(":")
target_datetime = datetime.datetime.today().replace(hour=int(time_[0]), minute=int(time_[1]),
second=0, microsecond=0)
current_datetime = datetime.datetime.now()
weekdaynumber = weekday_mapping(weekday)
one_day = datetime.timedelta(days=1)
while True:
if target_datetime.weekday() == weekdaynumber:
if target_datetime > current_datetime:
break
else:
target_datetime = target_datetime + one_day
target_datetime = target_datetime + one_day
remaining_time = target_datetime - current_datetime
return remaining_time.seconds
def sort_table_data(table_data):
return sorted(table_data, key=lambda x: x[2])
@app.route('/')
def index():
# Erzeugen der Tabelle
table_data = []
for entry in data["items"]:
name = entry['name']
time_string = entry['date']
remaining_time = get_remaining_time(time_string)
other_data = entry['other_data']
table_data.append([name, time_string, remaining_time, other_data])
# Sortieren der Tabelle nach der verbleibenden Zeit
table_data = sort_table_data(table_data)
return render_template('index.html', table_data=table_data)
if __name__ == '__main__':
app.run(debug=True)
Display More
<!DOCTYPE html>
<html>
<head>
<title>Meine Webseite</title>
</head>
<body>
<h1>Titelüberschrift</h1>
<table border="1">
<tr>
<th>Name</th>
<th>Startzeit</th>
<th>Verbleibende Zeit</th>
<th>Sonstige Daten</th>
</tr>
{% for entry in table_data %}
<tr>
<td>{{ entry[0] }}</td>
<td>{{ entry[1] }}</td>
<td id="remaining_time">{{ entry[2] }}</td>
<td>{{ entry[3] }}</td>
</tr>
{% endfor %}
</table>
<script>
// Aktualisierung der verbleibenden Zeit in Echtzeit
setInterval(function() {
{% for entry in table_data %}
var remaining_time = document.getElementById("remaining_time");
remaining_time.innerHTML = remaining_time - 1000);
{% endfor %}
}, 1000);
</script>
</body>
</html>
Display More
[[items]]
name = "Item 1"
date = "Monday 17:00"
other_data = "Other data 1"
[[items]]
name = "Item 2"
date = "Wednesday 15:00"
other_data = "Other data 2"
[[items]]
name = "Item 3"
date = "Friday 16:00"
other_data = "Other data 3"
Display More
Bildschirmanzeige:
Titelüberschrift
Name | Startzeit | Verbleibende Zeit | Sonstige Daten |
---|---|---|---|
Item 2 | Wednesday 15:00 | 26548 | Other data 2 |
Item 3 | Friday 16:00 | 30148 | Other data 3 |
Item 1 | Monday 17:00 | 33748 | Other data 1 |