Динамические id для тега
Я хочу решить типичную задачу. У меня есть список блюд, он берется волшебным образом из базы данных и выводится в
<div id="midlebox">{% for row in result %}<p>{{row[0]}}</p>{% endfor %}</div>
ла-ла , в примере кода увидите. НО есть проблема, я не знаю как присвоить каждому выведенному на экран значению его id.
Мне это нужно, чтобы по нему потом получить информацию о том, какой текст содержится внутри тега. Если есть другой способ получить текст из тега , более логичный и простой, тоже хорошо. Собственно мне это все нужно, чтобы пользователь зашел в свой личный кабинет и увидел в табличке , какие блюда он добавил в свой ежедневный рацион (условно по нажатию чекбокса рядом с названием блюда, содержание тега падает в базу данных и потом из нее просто отображается в личном кабинете пользователя, доступ к которому также имеет его врач).
Все это в рамках моей научки по рекомендациям к питанию для больных диабетом 1ого и 2ого типа. Надеюсь скоро добавлю туда калорийность, сахоросодержание и прочие параметры, но пока бы придумать как устроить подобное взаимодействие с пользователем. Иначе не понятно , что он ест , в каких кол-вах и как ему помочь. Большая часть работы реализована с помощью Python - FLask и базами данных .db а так же html css.
@app.route('/search', methods=['POST'])
def search():
if request.method == 'POST':
query = (request.form['input_query'],)
con = sqlite3.connect('diacompanion.db')
cur = con.cursor()
cur.execute("""SELECT name
FROM constant_food
WHERE category = ?""", (query))
result = cur.fetchall()
return render_template('index.html', result=result)
Ответы (1 шт):
Вот несколько правок:
файл manage.py
@app.route('/search', methods=['POST'])
def search():
search_string = request.form['input_query']
con = sqlite3.connect('diacompanion.db')
cur = con.cursor()
cur.execute("SELECT DISTINCT (category) category ,_id FROM"
" constant_food WHERE category LIKE ? GROUP BY category", ('%{}%'.format(search_string),))
result = cur.fetchall()
return render_template('index.html', result=result)
@app.route('/patient_ration', methods=['POST'])
def patient_ration():
return render_template('index.html', result=request.form)
"LIKE" добавлено в запрос, потому что пользователь может не знать точно, как называется категория продуктов. Можно почитать здесь
Выводиться будут только найденные названия категорий. Чтобы они не повторялись в запрос включены DISTINCT и GROUP BY
Второй роут просто для примера как будет отрабатывать форма
файл index.html
<div id="midlebox">
<form method='post' action='/patient_ration'>
{% for row in result %}
<div class="form-check">
<input type="checkbox" class="form-check-input" name="{{row[1]}}" id="{{row[1]}}">
<label class="form-check-label" for="{{row[1]}}">{{ row[0] }}</label>
</div>
{% endfor %}
<button type="submit" class="btn btn-primary">ОК</button>
</form>
</div>
Там будет список всех категорий которые попадут под строку ввода. Например, если ввести "мяс", то подходят сразу две.
Чтобы избежать использования JavaScript, предлагаю сделать одну кнопку, подтверждающую выбор пациентом набора продуктов. По нажатию этой кнопки ОК данные формы будут обрабатываться внутри
@app.route('/patient_ration', methods=['POST'])
Да, нашел тут кое-что, может пригодиться: Дистанционный мониторинг состояния больных сахарным диабетом
