将变量从 jinja2 模板传递到 python

Pass variable from jinja2 template to python

抱歉,如果这是一个菜鸟问题,我还在学习中。我已经将 python 代码中的变量传递给 jinja2 HTML 模板以设置 URL,如下所示:

<a href="/delete/{{ result.key.id() }}">Delete</a>

按下 link 时,它应该 运行 查询删除具有该 ID 的实体。但是,当按下 link 时,它会转到 /delete/1827424298,这会导致 404 错误,因为请求处理程序不存在。

我需要将该 ID 传回我的 python 代码,以便它可以 运行 一种方法来删除具有相同 ID 的实体。我该怎么做呢?如果这很重要,请使用 webapp2。

class DeleteRequestHandler(webapp2.RequestHandler):

def get():


    template = template_env.get_template('myrequests.html')
    context = {

        'results': results.key.id()

    }

    self.response.out.write(template.render(context))

编辑:我添加了我的删除处理程序 - 它不完整,因为我还没有添加删除实体的查询。到目前为止,我的想法是我可以从 jinja2 模板中获取 results.key.id() 并将其放入 results,但我不确定这是否可行。

所以我 认为 你感到困惑的是如何设置一个路由处理程序,其中包含 URL 的动态部分。遗憾的是,在 webapp2 教程中完全跳过了这一点,因为它是编写任何 Web 应用程序的基本部分。但是,the guide to routing 中对此有很好的介绍,您应该阅读。

最简单的,就是在路由中放置一个正则表达式:

app = webapp2.WSGIApplication([
    ...
    (r'/delete/(\d+)', MyDeleteHandler),
])

现在会将 /delete/<number>/ 形式的任何 URL 路由到您的删除处理程序。

您在 URL 中传递的 ID 将是处理程序方法的第一个位置参数:

class MyDeleteHandler:
    def get(self, item_id):
        key = ndb.Key(MyModel, item_id)   # or whatever