我有一个关于URL更改的基本问题.假设我有一个HTML页面http://example.com/create,其中包含带有一些输入字段的表单.从这个输入字段我想创建一个python列表,该列表应该用于生成http://example.com/show_list包含基于python列表值的列表的另一个HTML页面.
所以观点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")
Run Code Online (Sandbox Code Playgroud)
假设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 %}
Run Code Online (Sandbox Code Playgroud)
基本上这很好用.列表值"传递"到Jinja模板,并显示列表.
如果您现在再次查看我的路由方法,您可以看到我只是在render_template显示该shwo_list页面.对我来说,这有一个缺点.该网址不会更改为http://example.com/show_list,但会保留http://example.com/create.
所以我考虑在方法调用中创建自己route的show_list,而不是直接渲染下一个模板.像这样:create()redirect
@app.route('/show_list')
def tasklist_foo():
return render_template( "show_list.html" )
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我不知道如何将list对象传递给show_list().我当然可以将列表中的每个项目解析为URL(因此将其发布到http://example.com/show_list),但这不是我想要做的.
正如您已经认识到的那样,我对网络开发很陌生.我想我只是使用了错误的模式,或者没有找到一个简单的API函数来完成这个技巧.所以我请你告诉我一个解决问题的方法(很快就会总结):渲染show_list模板并将URL更改http://example.com/create为http://example.com/show_list使用create()方法/路径中创建的列表.
如果列表不是很长,你可以在查询字符串上传递它,比如用逗号分隔:
comma_separated = ','.join(some_list)
return redirect(url_for('show_list', some_list=comma_separated))
# returns something like 'http://localhost/show_list?some_list=a,b,c,d'
Run Code Online (Sandbox Code Playgroud)
然后在视图中的模板中,您可以像这样迭代它们:
{% for item in request.args.get('some_list', '').split(',') %}
{{ item }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
对于较长的列表,或者如果您不想在查询字符串上公开它,您还可以将列表存储在会话中:
session['my_list'] = some_list
return redirect(url_for('show_list'))
Run Code Online (Sandbox Code Playgroud)
然后在模板中:
{% for item in session.pop('my_list', []) %}
{{ item }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15202 次 |
| 最近记录: |