使用Flask和jinja2从数据库中提取字段

时间:2018-03-27 17:58:50

标签: flask jinja2

我正在使用Pythonanywhere开发我的代码。我正在尝试修改和扩展课程中的一些代码。

我正在修改从数据库打印记录的代码,以便从每条记录中提取特定的字段值,然后在数据库中找到该字段的所有值的最大值。

我已经在flask_app.py中复制并重命名了以下代码,该代码只获取数据库中的所有记录

class ViewController: UIViewController {
var translation: CGPoint!
var startPosition: CGPoint! //Start position for the gesture transition
var originalHeight: CGFloat = 0 // Initial Height for the UIView
var difference: CGFloat!

override func viewDidLoad() {
    super.viewDidLoad()
    originalHeight = dragView.frame.height
}

@IBOutlet weak var dragView: UIView! // UIView with UIPanGestureRecognizer

@IBOutlet var gestureRecognizer: UIPanGestureRecognizer!

@IBAction func viewDidDragged(_ sender: UIPanGestureRecognizer) {

    if sender.state == .began {
        startPosition = gestureRecognizer.location(in: dragView) // the postion at which PanGestue Started
    }

    if sender.state == .began || sender.state == .changed {
        translation = sender.translation(in: self.view)
        sender.setTranslation(CGPoint(x: 0.0, y: 0.0), in: self.view)
        let endPosition = sender.location(in: dragView) // the posiion at which PanGesture Ended
        difference = endPosition.y - startPosition.y
        var newFrame = dragView.frame
        newFrame.origin.x = dragView.frame.origin.x
        newFrame.origin.y = dragView.frame.origin.y + difference //Gesture Moving Upward will produce a negative value for difference
        newFrame.size.width = dragView.frame.size.width
        newFrame.size.height = dragView.frame.size.height - difference //Gesture Moving Upward will produce a negative value for difference
        dragView.frame = newFrame
    }

    if sender.state == .ended || sender.state == .cancelled {
        //Do Something
    }
  }
}

然后在listmaxidv2.html模板中进行渲染,我试图隔离第一个字段的每个值。我已经尝试了很多东西,我的最后一次尝试如下,但我不确定javascript是否正在执行(是的,这有点乱)。有没有明显的东西可以说明为什么我没有进入记录的第一个字段?

@app.route('/listmaxidv2')
def listmaxidv2():
with sqlite3.connect("MyFilms2.db") as conn:
    cursor = conn.cursor()
    sql = """SELECT * FROM tblFilms"""
    cursor.execute(sql)
    rows = cursor.fetchall()
    return render_template("/listmaxidv2.html", rows=rows)

1 个答案:

答案 0 :(得分:2)

你误解了Jinja的工作方式...... Jinja在python库中,因此,它执行服务器端并且javascript代码执行客户端所以你可以&#39当你在这里尝试做的时候,把两者混合起来......

好消息是你可以像这样简单地调整......

<!doctype html>

<html>

<link rel="stylesheet" href="static/filmv2.css">
<script>

    var raw_data = {{ rows|tojson }};

    function getids(in_var){
        return isNaN(in_var) ? "invalid film id" + in_var : "Valid film id" + in_var;
    }
    var func_ret = 0

    raw_data.forEach(function(row) {
        func_ret =  getids(row);
        document.getElementById("id_fdbk").innerHTML = func_ret;
    });

    document.getElementById("testHTML").innerHTML = "Test text to HTML id";

</script>

<body>

<h1> Find maximum film ID </h1>
<h2> Generate next free film ID </h2>
<input type='button' value='Go' onclick='getids(017)';'>
<p id="id_fdbk"></p>
<p id="testHTML"></p>


</body>

</html>

我无法弄清楚你上面要做的事情。例如。此代码将覆盖列表中每个项目的相同HTML元素。我怀疑你只是想让一些东西发挥作用......

通过使用Jinja的tojson过滤器,您可以告诉Jinja将此信息传递到您的模板中,以便javascript可以将其用作本机对象。

请注意,如果您正在使用 Flask&lt; 0.10 您还需要safe过滤器,就像它们在上面链接的文档中所示。 (即var raw_data = {{ rows|tojson|safe }};