страница профиля колбы для пользователей - PullRequest
0 голосов
/ 26 мая 2018

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

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

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

0 голосов
/ 27 мая 2018

Обычный подход к подобным ситуациям заключается в использовании наследования шаблонов , который разделяет общую часть на "базовый" шаблон.Например,

<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 ...
...