【发布时间】:2023-02-14 05:03:54
【问题描述】:
我有一个 FastAPI 应用程序,它采用任何端点 foo/{page} 并使用 page 变量来决定要呈现的模板。
它看起来有点像这样:
@api_router.get("/foo/{page}/")
def foo_router(page: str, request: Request):
return TEMPLATES.TemplateResponse(
f"{page}.html",
{
"request": request,
'page_title':page,
'schema':schema[page],
}
)
这些模板包含的按钮是从一个模式创建的,该模式将按钮文本和链接目标作为键/值对。
是这样的:
schema = {
"index": {
"Look At Our Menu":"foo/menu",
"Find Our Store":"foo/location",
}
}
Jinja 模板如下所示:
<div class="form_wrapper">
{% for k in buttons %}
<a href="foo/{{buttons[k]}}/">
<div class="button_text full_button">
{{ k.upper() }}
</div>
</a>
{% endfor %}
</div>
我的问题是,如果我在foo/menu/ 中有一个我想指向foo/drinks 的链接,它会尝试加载foo/menu/foo/drinks。如何重置路径使其不嵌套?
【问题讨论】:
-
这似乎更多地是关于 HTML 而不是关于 Jinja。如果您有一个页面
/foo/menu,并且您想要从该页面上的链接链接到/foo/drinks,那么相对链接将是<a href="drinks">Drinks</a>。 -
对 - 问题是知道读取路径的端点是
foo/{bar}drinks的链接将转到/drinks而不是foo/drinks(实际上我认为我设置它的方式会转到foo/menu/drinks——同样的问题)无论如何我在下面想出了一些办法 -
你可能想在让模板模块读取它之前对该字符串进行大量清理,我想?
-
@MatsLindh 说更多?
-
@steadynappin 不要使用用户控制的值直接加载模板,而是确保它首先映射您的期望值之一,以避免用户加载您不希望他们能够执行的随机模板。