我正在使用客户 ID 和姓名列表填充下拉列表(对于 EHR)。
在 get_client 路由中,用户选择一个客户端,client_id(fk)被传递到 Progress_view 路由,该路由查询一系列进度注释,这些进度注释将被传递到 Progress_view.html 模板。
模板的滚动 div 为空 - 没有 stderr,但没有数据。我尝试传递命名参数、session['client_id'] 值和request.args.get('client_id')。为了排除故障,我将 client_id 作为标量与数组一起传递给模板:
return render_template('progress_view.html', notes=results, client_id=client_id)
。
无论我如何传递参数,它都会显示在模板顶部,因此正在被解析。 (?) 接下来,我尝试在 SQLAlchemy 中使用不同的语法,结果相同 - 没有数据。因此,当 client_id 被硬编码时,我创建了 Progress_test 路由。这会填充模板的滚动 div 并打印 client_id。我不知道如何继续。
这是我的路线:
def get_client():
clients = db.session.query(MPI).filter().all()
if request.method == "POST":
client_id = request.form.get("client_id")
if client_id:
session['client_id'] = client_id
# return render_template('progress_view.html', client_id=client_id)
return redirect(url_for("chart.progress_view"))
return render_template('get_client.html', clients=clients)
# @chart.route('/progress_view/<client_id>', methods=["GET", "POST"])
@chart.route('/progress_view', methods=["GET", "POST"])
@login_required
def progress_view():
# client_id = request.args.get('client_id')
client_id = session['client_id']
client_id = int(client_id)
# from sqlalchemy import select
# sth = select(ProgressNote.unitname, ProgressNote.staffname, ProgressNote.notedate, ProgressNote.notebody).where(ProgressNote.client_id == client_id)
# results = db.session.execute(sth)
results = db.session.query(ProgressNote).filter(ProgressNote.client_id == client_id).all()
return render_template('progress_view.html', notes=results, client_id=client_id)
@chart.route('/progress_test', methods=["GET", "POST"])
@login_required
def progress_test():
client_id = 3
from sqlalchemy import select
sth = select(ProgressNote.unitname, ProgressNote.staffname, ProgressNote.notedate, ProgressNote.notebody).where(ProgressNote.client_id == client_id)
results = db.session.execute(sth)
return render_template('progress_view.html', notes=results, client_id=client_id)
模板:
<div id="logview">
<table style="border: 0px solid black; border-collapse: collapse; width:999px; margin-left: auto; margin-right: auto;">
<tbody>
{% for note in notes %}
<tr style="border: 1px solid black; border-collapse: collapse;" >
<td style="border: 1px solid black; border-collapse: collapse;"><b>Unit Name:</b> <br />{{ note.unitname }}</td>
<td style="border: 1px solid black; border-collapse: collapse;"><b>Entered By:</b> <br />{{ note.staffname }}</td>
<td style="border: 1px solid black; border-collapse: collapse;"><b>Note Date:</b> <br />{{ note.notedate }}</td>
</tr>
<tr style="border: 1px solid black; border-collapse: collapse;" >
<td colspan="5" style="text-align: left; border: 1px solid black; border-collapse: collapse;"><pre>{{ note.notebody}}</pre></td>
</tr>
<tr style="border: 0px solid black; border-collapse: collapse;" >
<td colspan="5" style="border-collapse: collapse;"> <br /> <br /> </td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
型号:
class ProgressNote(UserMixin, db.Model):
rec_id = db.Column(db.Integer, primary_key=True)
client_id = db.Column(db.Integer)
chart = db.Column(db.String(80))
unitname = db.Column(db.String(255))
staffname = db.Column(db.String(255))
notedate = db.Column(db.DateTime)
notebody = db.Column(db.String)
在我的 Perl CGI 脚本中,我使用子例程发布菜单,然后发布表单,然后执行查询。于是我想到:我真的需要两条路线吗?不,这有效:
@chart.route('/progress_view', methods=["GET", "POST"])
@login_required
def progress_view():
clients = db.session.query(MPI).filter().all()
if request.method == "POST":
client_id = request.form.get("client_id")
if client_id:
results = db.session.query(ProgressNote).filter(ProgressNote.client_id == client_id).all()
return render_template('progress_view.html', notes=results, client_id=client_id)
return render_template('get_client.html', clients=clients)