我有一个不同客户的门户网站(房东,房客)
他们有一个注册页面。注册时,我会使用角色对其进行适当标记。
当他们登录时,他们要做的第一件事就是填写他们的个人资料。为此,我创建了一个页面profile.html ...
这些用户除了极少数外几乎都有相似的字段。我对房东有一些属性,有些属于房客。但是它们都有一些类似的字段,比如first_name,last_name,phone,age,sex等......
目前,我维护了两个不同的个人资料表和一个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 %}
使用这些IF的页面profile.html太长了......
有没有办法简化这个?
答案 0 :(得分:1)
这种情况的常见方法是使用template inheritance,它将公共部分分离为“基础”模板。如,
<html>
...
<body>
{% block content %}{% endblock %}
</body>
</html>
并通过模板继承此基础,这些模板为您的每个条件提供特定内容。例如,为填写简档的房东提供内容的模板看起来像
{% extends "base.html" %}
{% block content %}
read only profile pages for landlord
{% endblock %}
然后在视图方法中选择适当的模板,在那里移动相应的检查。像
这样的东西@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 ...