【发布时间】:2020-01-16 08:37:07
【问题描述】:
在这里,我将分享我想要实现的示例代码。
my_bluprint = Blueprint('index',
__name__,
template_folder=template_dir)
@my_bluprint.route('/print', methods=['GET', 'POST'])
def my_function_2():
print('i was redirected')
if request.method == 'POST':
age = request.form.get('age')
print('AGE: ', age)
return render_template("form2.html")
@my_bluprint.route('/test', methods=['GET', 'POST'])
def my_function():
if request.method == 'POST':
print('my_function')
# do something
name = request.form.get('name')
print('my_name', name)
if name == 'root':
print('name is ', name)
return redirect(url_for("index.my_function_2"))
# age = request.form.get('age')
print('AGE: ',age) # I need input age from my_function_2 here
age_trans = my_module.ageMul(age)
print('TransAGE: ', age_trans)
return render_template("result.html", result=age_trans)
return render_template("form1.html")
我需要根据前一个模板的输入来渲染不同的模板。
在运行时,我的程序将使用来自一个模板的输入来决定下一个重定向哪个模板。我尝试按照我在示例代码中使用的方式渲染模板,但我需要来自先前模板的输入以进行进一步处理,并结合所有其他已渲染模板的输入。
编辑
我能够重定向到我的代码中的其他路线。但是在执行my_function_2() 之后,我需要来自my_function() 中my_function_2() 中使用的模板的输入。这意味着我需要使用来自my_function_2 的数据返回主路线,即/test。我需要帮助以了解如何做到这一点
另一个想法
有没有办法在同一个函数中使用条件来呈现不同的模板,比如说my_function()。如果来自一个 html 表单的输入使条件为 true 呈现模板 A 否则呈现模板 B ?同时保留来自my_function() 中呈现的第一个模板的输入?这样我就可以只有一条路线渲染多个模板?但我想保留以前渲染的所有模板中的数据
这样做的好方法是什么?
EIDT 2
我试过这个
@my_bluprint.route('/test', methods=['GET', 'POST'])
def my_function():
if request.method == 'POST':
#name = request.form.get('name')
session['name'] = request.form['name']
print('my_name', session['name'])
if session['name'] == 'root':
print('name is ', session['name'])
#return redirect(url_for("index.my_function_2"))
return render_template("form2.html")
age = request.form.get('age')
print('AGE ',age)
age_trans = my_module.ageMul(age)
print('TransAGE: ', age_trans)
print(session['name'])
return render_template("result.html", result=age_trans)
return render_template("form1.html")
第一次运行顺利,直到return render_template("form2.html") 在此处提交的表单控制返回到if request.method == 'POST': 并从头开始执行并在此处给我错误session['name'] = request.form['name'] 但我希望程序控件始终使用它得到的值前进在第一次运行render_template("form1.html") 直到页面(url)被刷新
【问题讨论】:
-
这里的问题到底是什么有点不清楚。你能更明确地强调这个问题吗?
-
@deceze 我可以在我的代码中重定向到其他路线。但是我需要在使用来自 my_function_2 的数据执行
my_function_2()'. which means i need to come back to main route i-e/test` 之后,从我在my_function()中使用的my_function_2()模板中输入。我需要帮助以了解我该怎么做? -
这些函数代表单独的 HTTP 请求处理程序。您只能通过 HTTP 传递信息。这意味着,URL 中的参数,或表单和 POST 请求。也许您也可以使用 cookie 和/或会话来存储一些信息。
-
有没有办法在同一个函数中使用条件渲染不同的模板,比如说
my_function()。如果来自一个 html 表单的输入使条件为 true 呈现模板 A 否则呈现模板 B ?同时保留来自my_function()中呈现的第一个模板的输入?这样我就可以只有一条路线渲染多个模板?但我想保留以前渲染的所有模板中的数据。 -
是的,你已经这样做了。完全不同
if..else: return render_template(...)。但是,“保留值”的工作方式相同:视图(模板)必须有一个表单或创建包含您要在下一个 HTTP 请求中传递的值的 URL。这都是无状态的。每次调用函数就像第一次一样。它不会“保留”任何东西,它只有请求中的信息可以使用。
标签: python html if-statement flask jinja2