gpt4 book ai didi

python - 如何将字典传递给 Flask 中的 url_for

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:11 26 4
gpt4 key购买 nike

我想将端点传递给 url_for,其中端点包含 name=value 参数,其中 name 是一个变量。

基本上我有多个模板,如果我可以传递参数变量名称,这些模板可以折叠成一个模板。解决方案可能是传递字典,但可能还有其他方法。我绝对可以通过在渲染之前对 jinja 生成的 html 进行后处理来做到这一点。

我已经尝试了所有我能想到的明显技巧,包括嵌套 {{ }}

所以在我的路线代码的末尾我有

# routes.py
...
@bp.route('/customer/add/prompt/<customer_id>',methods = ['POST', 'GET'])
@login_required
def customer_add_prompt(customer_id):
#code code code
return render_template('customer_add.html',
customer_id = customer_id)

事实上,对于不同的主题(客户、产品、发票),我有很多路线,所有都以这种方式结束。因此,对于每个主题,我都需要一个如下所示的神社模板。

# customer_add.html
...
<form action = "{{ url_for(customer_add, customer_id = customer_id) }}" method = "POST">
<-- html htlm htlm -->
</form>

当用户提交表单时,将遵循 customer_add 的端点并且 customer_add 期望并传递 customer_id = 1234(或任何值是)。

问题来了。我应该能够像这样组合所有模板。

# subject_add.html
...
<form action = "{{ url_for(subject_target, subject = subject_id) }}" method = "POST">
<-- html htlm htlm -->
</form>

然后像这样渲染它。

# routes.py
...
@bp.route('/customer/add/<customer_id>',methods = ['POST', 'GET'])
@login_required
def customer_add_prompt(customer_id):
#code code code
subject_target = 'customer_add.html'
subject = 'customer_id'
subject_id = customer_id
return render_template(subject_target,
subject = subject_id)

当我这样做时,我收到一条错误消息,提示 Could not build url for endpoint 'customer_add' with values ['subject']。您是否忘记指定值 ['entity_id']?

测试表明 subject_targetsubject_id 被替换为 fine。但是 subject 没有被替换,因为在 url_for 语法中它是一个参数名称,端点期望一个名为 customer_id 的变量的值不是主题

我希望有一种方法可以说明 jinja 中的参数名称。概括我可能想传递一个参数字典。

理想情况下,我可以像这样传递 d = {'subject': x, ...} url_for(subject_action, d) 并且 Jinja 会认为这等同于url_for(subject_action, subject=1234, ... 当 x=1234 时。

最佳答案

您可以向 url_for() 添加参数。根据 docs :

Variable arguments that are unknown to the target endpoint are appended to the generated URL as query arguments

所以你可以做

<form action = "{{ url_for(action_target, 
subject_type=subject_id,
2nd_variable=2nd_variable,
etc...) }}" method = "POST">

但是正如 wonka 所说,您最好将数据作为 POST 参数发送。

如果我误解了您的意思,并且您试图从 View 中的 render_template 调用传递数据,那么您也可以这样做。

return render_template('template_name.html', 
data={
"action_type": "action",
"subject_type": subject_value
})

然后您可以使用 {{data["subject_type"]}} 在您的模板中访问它

关于python - 如何将字典传递给 Flask 中的 url_for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57408803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com