我有一个关于 URL 更改的非常基本的问题。假设我有一个http://example.com/create
包含一些输入字段的表单的 HTML 页面。从这个输入字段中,我想创建一个 python 列表,该列表应该用于生成另一个 HTML 页面http://example.com/show_list
,其中包含基于 python 列表值的列表。
所以观点http://example.com/create
是:
@app.route('/create', methods=['GET', 'POST'])
def create():
if request.method == 'POST':
some_list = parse_form_data_and_return_list(...)
return render_template( "show_list.html", some_list=some_list) #here's the problem!
return render_template( "create.html")
假设parse_form_data_and_return_list(...)
接受用户输入并返回一个包含一些string
值的列表。我在困扰我的行中添加了评论。我稍后会回到它,但首先给你页面的模板(http://example.com/show_list
),应该在用户输入之后加载:
{% block content %}
<ul class="list">
{% for item in some_list %}
<li>
{{ item }}
</li>
{% endfor %}
</ul>
{% endblock content %}
基本上这工作正常。列表值被“传递”到 Jinja 模板并显示列表。
如果您现在再次查看我的路由方法,您会发现我只是在render_template
显示shwo_list
页面。对我来说,这有一个缺点。URL 不会更改为http://example.com/show_list
,但会保持在http://example.com/create
。
所以我考虑在方法调用中创建一个自己的route
forshow_list
和 in ,而不是直接渲染下一个模板。像这样:create()
redirect
@app.route('/show_list')
def tasklist_foo():
return render_template( "show_list.html" )
但在这种情况下,我看不到如何将list
对象传递给show_list()
. 我当然可以将列表中的每一项解析为 URL(因此将其发布到http://example.com/show_list
),但这不是我想要做的。
正如您可能已经认识到的那样,我对 Web 开发还很陌生。我想我只是使用了错误的模式,或者没有找到一个简单的 API 函数来解决这个问题。所以我恳请您向我展示一种解决我的问题的方法(很快总结):渲染show_list
模板并将 URL 从更改http://example.com/create
为http://example.com/show_list
使用在create()
方法/路由中创建的列表。