用户的烧瓶个人资料页面

flask profile page for users

我有一个面向不同客户(房东、租户)的门户网站

他们有一个注册页面。当他们注册时,我会使用角色适当地标记他们。

他们登录后,要做的第一件事就是填写个人资料。为此,我创建了一个页面 profile.html...

除了少数几个,这两个用户的领域几乎相似。我对房东有一些属性,对房客有一些属性。但是它们都有一些相似的字段,如first_name、last_name、phone、年龄、性别等...

目前,我维护着两个不同的配置文件表和一个 profile.html 页面。

我将它们发送到 profile.html,我正在使用

{% if user == 'landlord' %}
<html
 <body>
     profile pagefor landlord
</body>
</html>
{% endif %}
{% if user == 'tenant' %}
<html
 <body>
     profile pagefor tenant
</body>
</html>
{% endif %}

如果我为每个用户重复整个 HTML 块,上述结构就会出现问题。

用户填写个人资料后,我会向他们展示只读 profile.html 页面,如

{% if user == 'landlord' and profile_filled %}
<html
 <body>
     read only profile page for landlord
</body>
</html>
{% endif %}
{% if user == 'tenant' and profile_filled %}
<html
 <body>
     read only profile page for tenant
</body>
</html>
{% endif %}

页面 profile.html 因这些 IF 变得太长....

有没有办法简化这个?

解决这种情况的常用方法是使用 template inheritance,它将公共部分分离到 "base" 模板中。例如,

<html>
...
<body>
{% block content %}{% endblock %}
</body>
</html>

并通过模板继承此基础,为您的每个条件提供特定内容。例如,为填写个人资料的房东提供内容的模板看起来像

{% extends "base.html" %}
{% block content %}
read only profile pages for landlord
{% endblock %}

然后 select 通过将适当的检查移动到视图方法中的适当模板。像

@app.route('/profile')
def profile():
    ...
    if user == 'landlord' and user.has_filled_in_profile():
        return render_template("landlord_with_profile.html", ...)
    elif user == 'tenant' and user.has_filled_in_profile():
        return render_template("tenant_with_profile.html", ...)
    elif ...