Страница профиля колбы для пользователей

У меня есть портал с разными клиентами (арендодатель, арендатор)

Для них есть страница регистрации. Когда они регистрируются, я отмечаю их соответствующим образом, используя роли.

Когда они входят в систему, первое, что им нужно сделать, это заполнить свой профиль. Для этого я создал страницу 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 ...
Другие вопросы по тегам