我正在从 C#.NET 迁移到 Python/Flask。
在 .NET 中,我有 MasterPage、UserControl、PartialView
,每个都有自己的代码。
例如我可以将检查登录函数保存在 Login.ascx.cs
中,并在任何我想要的地方呈现 Login.ascx
。如果已登录,则显示欢迎消息,否则显示登录表单。
但是在 Flask 中我只找到了包含静态 html 文件的 {% include 'login.html' %}
。
我如何在 Flask 中实现这个设计?
我现在可能有答案了:
我没有使用 g.user
,这就是我来这里寻求帮助的原因。其他人建议使用 @app.context_processor
。我正在尝试,这似乎是我想要的。与g
类似的全局可访问设计。
最佳答案
尽管它的名字可能会让您认为它确实如此 include
不插入静态 HTML 文件的内容。它实际上插入了 呈现 Jinja 模板的内容,它的功能非常类似于 MVC 的部分 View (如果我理解正确的话)。它has access to the parent template context默认情况下。因此,例如,如果您将用户存储在 g.user
上,因为默认情况下可以访问 g
,您可以简单地执行以下操作:
<-- login.html -->
{% if g.user.is_anonymous() %}
Login form goes here
{% else %}
Greetings {{g.user.full_name}}!
{% endif %}
并且 {% include "login.html"%}
您希望登录表单/用户问候显示的任何地方。
对编辑的回应
如果你想确保所有模板都可以访问user
,你确实可以使用context_processor
添加一个用户
:
@app.context_processor
def add_user():
# Get user
return {"user": user}
关于python - 我在 Flask 中有部分 View /代码隐藏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12152424/