将变量从 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
抱歉,如果这是一个菜鸟问题,我还在学习中。我已经将 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