3

我正在从 C#.NET 迁移到 Python/Flask。

在 .NET 中,我MasterPage, UserControl, PartialView每个都有自己的代码。

例如,我可以将检查登录功能保存在其中Login.ascx.cs并呈现Login.ascx我想要的任何位置。如果已登录,则显示欢迎消息,否则显示登录表单。

但在 Flask 中,我只发现{% include 'login.html' %}其中包含静态 html 文件。

如何在 Flask 中实现这个设计?

我现在可能有答案:

我没有使用g.user,这就是我来这里寻求帮助的原因。别人建议@app.context_processor。我正在尝试,这似乎是我想要的。与g.

4

2 回答 2

2

尽管它的名称可能会让您认为它不会include插入静态 HTML 文件的内容。它实际上插入了渲染的Jinja 模板的内容,它的功能非常类似于 MVC 的局部视图(如果我理解正确的话)。默认情况下,它可以访问父模板上下文。因此,例如,如果您将用户存储在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}
于 2012-08-28T15:30:30.130 回答
0

您应该查看Flask-Login,它是 Flask 的扩展。配置好之后就可以达到你的要求了。

于 2012-08-28T13:25:01.417 回答