我正在从C#.NET迁移到Python / Flask。
在.NET中,MasterPage, UserControl, PartialView
每个都有自己的代码。
e.g。我可以在Login.ascx.cs
中保存支票登录功能,并在任何我想要的地方呈现Login.ascx
。如果登录,则显示欢迎消息,否则显示登录表单。
但在Flask中我只发现{% include 'login.html' %}
包含静态html文件。
如何在Flask中实现此设计?
我现在可以回答:
我没有使用g.user
,这就是我来这里寻求帮助的原因。其他人建议@app.context_processor
。我正在尝试,这似乎是我想要的。与g
类似的全局可访问设计。
答案 0 :(得分:2)
尽管它的名称可能会让你认为include
没有插入静态HTML文件的内容。它实际上插入了呈现的 Jinja模板的内容,它的功能非常类似于MVC的部分视图(如果我理解正确的话)。它默认为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
添加user
:
@app.context_processor
def add_user():
# Get user
return {"user": user}
答案 1 :(得分:0)
您应该查看Flask-Login,这是Flask的扩展。配置完成后,即可满足您的要求。