我正在为代表账单的对象制作一个crud接口,如水费单,电费单等.
我正在使用sqlalchemy处理数据,使用wtforms来处理表单,并使用flask来处理它.
以下是我的路线看起来像是用来编辑现有账单的表格:
@app.route('/edit_bill/<int:bill_id>', methods = ['GET'])
def edit_bill(bill_id):
s = Session()
bill = s.query(Bill).filter_by(id=bill_id).first()
form = BillForm(obj=Bill)
return render_template('edit_bill.html', form = form)
Run Code Online (Sandbox Code Playgroud)
使用wtforms,我将bill对象传递给BillForm构造函数,确保表示要编辑的帐单的数据填充到表单中.
这就是它窒息的地方.这是例外:
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Bill.date_due has an attribute 'strftime'
Run Code Online (Sandbox Code Playgroud)
现在,我已经深入了解python shell并查询了一个帐单,以确保date_due上有一个datetime.date对象,就是这样.我使用Jinja来构建我的前端,所以我考虑创建一个模板过滤器,但我不知道如何使用wtforms,看起来sqlalchemy无论如何都是窒息.
那么它做什么?我非常有信心我只需要弄清楚如何将该datetime.date对象转换为字符串,但我不知道该怎么做.
HALP.谢谢!
编辑:这是BillForm类:
class BillForm(Form):
id = HiddenField()
name = TextField(u'Name:', [validators.required()])
pay_to = TextField(u'Pay To:',[validators.required()])
date_due = DateField(u'Date Due:',[validators.required()])
amount_due = IntegerField(u'Amount Due:', [validators.required()])
date_late = DateField(u'Late After:',[validators.required()])
amount_late = IntegerField(u'Late Amount:', [validators.required()])
date_termination …Run Code Online (Sandbox Code Playgroud) 我使用Flask编写Web应用程序,我想知道使用url_for模板和应用程序代码生成链接的原因.
这样做可以获得什么:
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
Run Code Online (Sandbox Code Playgroud)
还有这个:
<ul>
<li><a href="{{ url_for('index') }}">Home</a></li>
<li><a href="{{ url_for('about') }}">About Us</a></li>
<li><a href="{{ url_for('contact') }}">Contact</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
而不是硬编码路径?
这是Flask应用程序:
from flask import Flask, request, render_template, redirect, url_for, flash
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/contact', methods = ['POST'])
def contact():
if request.method == 'POST':
name = request.form['name']
email = request.form['email']
message = request.form['message']
flash(name)
flash(email)
flash(message)
return redirect(url_for('index'))
if __name__ == '__main__':
app.debug = True
app.secret_key='a;sldfjka;oeiga;lbneas; biaweag'
app.run()
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的模板:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="/contact" method="post">
<input type="text" name="name" />
<input type="text" name="email" />
<textarea name="message"> </textarea>
<input type="submit" />
</form>
<ul>
{% for …Run Code Online (Sandbox Code Playgroud)