#python #html #flask
Вопрос:
Я хочу все устроить, так что если ты пойдешь в mysite.com/calendar у is по умолчанию есть «дата начала» и «дата окончания», но затем есть кнопка отправки формы, которая восстанавливает ту же страницу с обновленной датой начала и окончания.
Прямо сейчас это в основном работает, но когда вы вернетесь mysite.com/calendar, он просто отправляет ту же форму, которую вы отправили в последний раз, когда были на сайте. Я хочу сделать сайт таким: когда вы впервые посещаете страницу, даты по умолчанию охватывают последнюю неделю, но затем, когда вы отправляете форму, она перезагружается с выбранным вами периодом времени.
Код Python/Колбы
from flask import request
import os
SECRET_KEY = os.urandom(32)
app.config['SECRET_KEY'] = SECRET_KEY
@app.route('/calendar', methods=['POST','GET'])
def calendar():
start_date_dt=dt.datetime.now()-dt.timedelta(7) #initialize start
end_date_dt=dt.datetime.now() #initialize end
if request.method == 'POST':
start_date_dt=pd.to_datetime(request.form['start'])
end_date_dt=pd.to_datetime(request.form['end'])
av_start_date=start_date_dt.strftime('%Y-%m-%d %H:%M') #convert date to query format
av_end_date=end_date_dt.strftime('%Y-%m-%d %H:%M')
df= av_query(av_start_date,av_end_date,'44201') #perform query next 3 lines
#...do some stuff with query...omitted
return render_template('calendar.html', title='Ozone Data',data_sets=zip(sites,datasets,cmap),sites=sites)
HTML-код
<form action="{{url_for('calendar')}}" method="post" enctype="multipart/form-data">
<label for="Start">Start:</label>
<input type="date" id="start" name="start">
<label for="End">End:</label>
<input type="date" id="end" name="end">
<input type="submit" value="Submit">
</form>
Ответ №1:
Вы можете передать даты начала и окончания в value
атрибут входных данных даты начала и окончания.
В демонстрационных целях я несколько упростил ваш код маршрута, чтобы сосредоточиться на проблеме в вопросе.
Вы могли бы изменить свой маршрут на что-то вроде этого:
@app.route("/calendar", methods=["POST", "GET"])
def calendar():
start_date = dt.datetime.now() - dt.timedelta(7)
end_date = dt.datetime.now()
if request.method == "POST":
start_date = request.form["start"]
end_date = request.form["end"]
return render_template("calendar.html", start_date=start_date, end_date=end_date)
и ваш шаблон к этому:
<form action="{{url_for('calendar')}}" method="post" enctype="multipart/form-data">
<label for="Start">Start:</label>
<input type="date" id="start" name="start" value={{start_date}}>
<label for="End">End:</label>
<input type="date" id="end" name="end" value={{end_date}}>
<input type="submit" value="Submit">
</form>
Если форма разнесена, используется дата из входных данных, в противном случае используется значение по умолчанию.
Если вы хотите, чтобы даты действия формы сохранялись при перезагрузках, вы можете использовать что-то вроде сеанса колбы.