我想使用 jinja2 格式 {{all.{{item}}}} 从 html 中的 sqlalchemy table 获取数据,其中 item 是字符串的元素,all 是数据
I want to get the data from the sqlalchemy table in html using jinja2 format {{all.{{item}}}} where item is the element of string and all is data
在我的代码中,“全部”是从 sqalchemy 数据库中获取的数据,现在我有另一个列表“被询问”,在该列表中,名称是存储列的名称,其中需要详细信息
但是当我 运行 这段代码时,它给了我一个错误:
问 = ["S_NO", "FAIL_TIME", "RIGHT_TIME", "FAILURE_REMARKS"],
当我 运行 "all.S_NO" 或 "all["S_NO"]" 它 运行 是完美的。但是我定义的情况给了我错误
enter code here
{% for all in data %}
{% for item in asked: %}
<tr>
<td>{{all.{{item}}}}</td>
{% endfor %}
烧瓶代码
class Data(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True, nullable=True)
S_NO = db.Column(db.String(250) ,nullable=False, unique= True)
STN_CODE = db.Column(db.String(250), nullable=False)
STN_NAME = db.Column(db.String(250), nullable=False)
ADSTE = db.Column(db.String(250), nullable=False)
SSE= db.Column(db.String(250), nullable=False)
ROUTE=db.Column(db.String(250),nullable=False)
SEC=db.Column(db.String(250), nullable=False)
DIV=db.Column(db.String(250), nullable=False)
FAIL_TIME=db.Column(db.String(250), nullable=False)
RIGHT_TIME=db.Column(db.String(250), nullable=False)
DURATION=db.Column(db.String(250), nullable=False)
FAILURE_REMARKS=db.Column(db.String(1000), nullable=False)
NAME_OF_GEAR_FAILED=db.Column(db.String(250), nullable=False)
TYPE_OF_MAIN_GEAR_FAILED =db.Column(db.String(250), nullable=False)
Failed_Gear_Desc=db.Column(db.String(250),nullable=False)
DEPTT=db.Column(db.String(250), nullable=False)
Cause=db.Column(db.String(250), nullable=False)
Train_Detention=db.Column(db.String(250), nullable=False)
def __repr__(self):
return f"< S_NO ={self.S_NO}, STN_CODE={self.STN_CODE},STN_NAME = {self.STN_NAME}, ADSTE ={self.ADSTE},SSE= {self.SSE}, ROUTE={self.ROUTE},SEC= {self.SEC}, DIV= {self.DIV},FAIL_TIME= {self.FAIL_TIME},RIGHT_TIME= {self.RIGHT_TIME},DURATION= {self.DURATION},FAILURE_REMARKS= {self.FAILURE_REMARKS}, NAME_OF_GEAR_FAILED= {self.NAME_OF_GEAR_FAILED}, TYPE_OF_MAIN_GEAR_FAILED = {self.TYPE_OF_MAIN_GEAR_FAILED}, Failed_Gear_Desc={ self.Failed_Gear_Desc}, DEPTT={ self.DEPTT}, Cause={ self.Cause},Train_Detention= {self.Train_Detention}>"
@app.route("/")
def home():
new_data = db.session.query(Data).all()
demand = ["S_NO", "FAIL_TIME", "RIGHT_TIME", "FAILURE_REMARKS"]
return render_template("index.html", data = new_data,header = failure_event, asked =demand)
新数据外观
< S_NO =2, STN_CODE=JHI,STN_NAME = Jind, ADSTE =ROK,SSE= SSE/SIG/JHI, ROUTE=D,SEC= DLI(EX) - BTI(EX), DIV= DLI,FAIL_TIME= 5/19/21 3:20,RIGHT_TIME= 5/19/21 5:55,DURATION= 2:35:00,FAILURE_REMARKS= YELLOW ASPECT LED UNIT WAS DEFECTIVE , SAME REPLACED AT 04:15. LONG DURATION DUE TO NO TEST MARGIN AVAILABLE. LDM-04/05/21, LDI-08/05/21. OLD LED MAKE - SARNARTI INC. , NAME_OF_GEAR_FAILED= UP STR. SIGNAL S-43 FAILED FOR LINE NO. 7, TYPE_OF_MAIN_GEAR_FAILED = SIGNAL, Failed_Gear_Desc=MACLS, DEPTT=SNT, Cause=LED DEF,Train_Detention= LOAD=15">
数据类型是
<class 'list'>
错误定义如下
{{全部。{{item}}}}
jinja2.exceptions.TemplateSyntaxError: 期望的名字或号码
我尽力让我的问题易于理解,如果我失败了请告诉我,以便我可以重试,这是我第一次使用 Whosebug
在 flask 本身而不是在模板中做复杂的逻辑部分总是更好。
使用它来获取数据库的值并将其传递给模板:
@app.route("/")
def home():
new_data = db.session.query(Data).all()
demand = ["S_NO", "FAIL_TIME", "RIGHT_TIME", "FAILURE_REMARKS"]
all_data_item = []
for data in new_data:
for item in demand:
if item in data:
all_data_item.append(data.item)
return render_template("index.html", data = all_data_item,header = failure_event, asked =demand)
在模板中:
{% for d in data %}
<td>{{d}}</td>
{% endfor %}
而不是使用 def repr(self):
以dict形式得到结果
class Data(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True, nullable=True)
S_NO = db.Column(db.String(250) ,nullable=False, unique= True)
STN_CODE = db.Column(db.String(250), nullable=False)
STN_NAME = db.Column(db.String(250), nullable=False)
ADSTE = db.Column(db.String(250), nullable=False)
SSE= db.Column(db.String(250), nullable=False)
ROUTE=db.Column(db.String(250),nullable=False)
SEC=db.Column(db.String(250), nullable=False)
DIV=db.Column(db.String(250), nullable=False)
FAIL_TIME=db.Column(db.String(250), nullable=False)
RIGHT_TIME=db.Column(db.String(250), nullable=False)
DURATION=db.Column(db.String(250), nullable=False)
FAILURE_REMARKS=db.Column(db.String(1000), nullable=False)
NAME_OF_GEAR_FAILED=db.Column(db.String(250), nullable=False)
TYPE_OF_MAIN_GEAR_FAILED =db.Column(db.String(250), nullable=False)
Failed_Gear_Desc=db.Column(db.String(250),nullable=False)
DEPTT=db.Column(db.String(250), nullable=False)
Cause=db.Column(db.String(250), nullable=False)
Train_Detention=db.Column(db.String(250), nullable=False)
def dobule_to_dict(self):
result = {}
for key in self.__mapper__.c.keys():
if getattr(self, key) is not None:
result[key] = str(getattr(self, key))
else:
result[key] = getattr(self, key)
return result
在 class 之外使用下面的函数
def to_json(all_vendors):
v = [ ven.dobule_to_dict() for ven in all_vendors ]
return v
users = Data.query.all()
sheet_data = to_json(users)
在我的代码中,“全部”是从 sqalchemy 数据库中获取的数据,现在我有另一个列表“被询问”,在该列表中,名称是存储列的名称,其中需要详细信息 但是当我 运行 这段代码时,它给了我一个错误: 问 = ["S_NO", "FAIL_TIME", "RIGHT_TIME", "FAILURE_REMARKS"], 当我 运行 "all.S_NO" 或 "all["S_NO"]" 它 运行 是完美的。但是我定义的情况给了我错误
enter code here
{% for all in data %}
{% for item in asked: %}
<tr>
<td>{{all.{{item}}}}</td>
{% endfor %}
烧瓶代码
class Data(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True, nullable=True)
S_NO = db.Column(db.String(250) ,nullable=False, unique= True)
STN_CODE = db.Column(db.String(250), nullable=False)
STN_NAME = db.Column(db.String(250), nullable=False)
ADSTE = db.Column(db.String(250), nullable=False)
SSE= db.Column(db.String(250), nullable=False)
ROUTE=db.Column(db.String(250),nullable=False)
SEC=db.Column(db.String(250), nullable=False)
DIV=db.Column(db.String(250), nullable=False)
FAIL_TIME=db.Column(db.String(250), nullable=False)
RIGHT_TIME=db.Column(db.String(250), nullable=False)
DURATION=db.Column(db.String(250), nullable=False)
FAILURE_REMARKS=db.Column(db.String(1000), nullable=False)
NAME_OF_GEAR_FAILED=db.Column(db.String(250), nullable=False)
TYPE_OF_MAIN_GEAR_FAILED =db.Column(db.String(250), nullable=False)
Failed_Gear_Desc=db.Column(db.String(250),nullable=False)
DEPTT=db.Column(db.String(250), nullable=False)
Cause=db.Column(db.String(250), nullable=False)
Train_Detention=db.Column(db.String(250), nullable=False)
def __repr__(self):
return f"< S_NO ={self.S_NO}, STN_CODE={self.STN_CODE},STN_NAME = {self.STN_NAME}, ADSTE ={self.ADSTE},SSE= {self.SSE}, ROUTE={self.ROUTE},SEC= {self.SEC}, DIV= {self.DIV},FAIL_TIME= {self.FAIL_TIME},RIGHT_TIME= {self.RIGHT_TIME},DURATION= {self.DURATION},FAILURE_REMARKS= {self.FAILURE_REMARKS}, NAME_OF_GEAR_FAILED= {self.NAME_OF_GEAR_FAILED}, TYPE_OF_MAIN_GEAR_FAILED = {self.TYPE_OF_MAIN_GEAR_FAILED}, Failed_Gear_Desc={ self.Failed_Gear_Desc}, DEPTT={ self.DEPTT}, Cause={ self.Cause},Train_Detention= {self.Train_Detention}>"
@app.route("/")
def home():
new_data = db.session.query(Data).all()
demand = ["S_NO", "FAIL_TIME", "RIGHT_TIME", "FAILURE_REMARKS"]
return render_template("index.html", data = new_data,header = failure_event, asked =demand)
新数据外观
< S_NO =2, STN_CODE=JHI,STN_NAME = Jind, ADSTE =ROK,SSE= SSE/SIG/JHI, ROUTE=D,SEC= DLI(EX) - BTI(EX), DIV= DLI,FAIL_TIME= 5/19/21 3:20,RIGHT_TIME= 5/19/21 5:55,DURATION= 2:35:00,FAILURE_REMARKS= YELLOW ASPECT LED UNIT WAS DEFECTIVE , SAME REPLACED AT 04:15. LONG DURATION DUE TO NO TEST MARGIN AVAILABLE. LDM-04/05/21, LDI-08/05/21. OLD LED MAKE - SARNARTI INC. , NAME_OF_GEAR_FAILED= UP STR. SIGNAL S-43 FAILED FOR LINE NO. 7, TYPE_OF_MAIN_GEAR_FAILED = SIGNAL, Failed_Gear_Desc=MACLS, DEPTT=SNT, Cause=LED DEF,Train_Detention= LOAD=15">
数据类型是
<class 'list'>
错误定义如下
{{全部。{{item}}}} jinja2.exceptions.TemplateSyntaxError: 期望的名字或号码我尽力让我的问题易于理解,如果我失败了请告诉我,以便我可以重试,这是我第一次使用 Whosebug
在 flask 本身而不是在模板中做复杂的逻辑部分总是更好。
使用它来获取数据库的值并将其传递给模板:
@app.route("/")
def home():
new_data = db.session.query(Data).all()
demand = ["S_NO", "FAIL_TIME", "RIGHT_TIME", "FAILURE_REMARKS"]
all_data_item = []
for data in new_data:
for item in demand:
if item in data:
all_data_item.append(data.item)
return render_template("index.html", data = all_data_item,header = failure_event, asked =demand)
在模板中:
{% for d in data %}
<td>{{d}}</td>
{% endfor %}
而不是使用 def repr(self):
以dict形式得到结果
class Data(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True, nullable=True)
S_NO = db.Column(db.String(250) ,nullable=False, unique= True)
STN_CODE = db.Column(db.String(250), nullable=False)
STN_NAME = db.Column(db.String(250), nullable=False)
ADSTE = db.Column(db.String(250), nullable=False)
SSE= db.Column(db.String(250), nullable=False)
ROUTE=db.Column(db.String(250),nullable=False)
SEC=db.Column(db.String(250), nullable=False)
DIV=db.Column(db.String(250), nullable=False)
FAIL_TIME=db.Column(db.String(250), nullable=False)
RIGHT_TIME=db.Column(db.String(250), nullable=False)
DURATION=db.Column(db.String(250), nullable=False)
FAILURE_REMARKS=db.Column(db.String(1000), nullable=False)
NAME_OF_GEAR_FAILED=db.Column(db.String(250), nullable=False)
TYPE_OF_MAIN_GEAR_FAILED =db.Column(db.String(250), nullable=False)
Failed_Gear_Desc=db.Column(db.String(250),nullable=False)
DEPTT=db.Column(db.String(250), nullable=False)
Cause=db.Column(db.String(250), nullable=False)
Train_Detention=db.Column(db.String(250), nullable=False)
def dobule_to_dict(self):
result = {}
for key in self.__mapper__.c.keys():
if getattr(self, key) is not None:
result[key] = str(getattr(self, key))
else:
result[key] = getattr(self, key)
return result
在 class 之外使用下面的函数
def to_json(all_vendors):
v = [ ven.dobule_to_dict() for ven in all_vendors ]
return v
users = Data.query.all()
sheet_data = to_json(users)