Страница профиля колбы для пользователей
У меня есть портал с разными клиентами (арендодатель, арендатор)
Для них есть страница регистрации. Когда они регистрируются, я отмечаю их соответствующим образом, используя роли.
Когда они входят в систему, первое, что им нужно сделать, это заполнить свой профиль. Для этого я создал страницу profile.html...
Оба этих пользователя имеют почти одинаковые поля, за исключением нескольких. У меня есть некоторые атрибуты для арендодателя и некоторые другие для арендатора. Но у них обоих есть похожие поля: имя, фамилия, телефон, возраст, пол и т. Д.
На данный момент я поддерживаю две разные таблицы профилей и одну страницу 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....
Есть ли способ упростить это?
1 ответ
Обычный подход к подобным ситуациям заключается в использовании шаблонного наследования, которое разделяет общую часть на "базовый" шаблон. Например,
<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 ...