@Andrew_Novikov

Что нужно сделать, чтобы условие {% if %} продолжало работать при переходе между страницами?

Делаю пет-проект на Django. Создал модель пользователя:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    agree = models.BooleanField (default=False)


Далее создал функцию согласия с пользовательским соглашением (знаю, не оптимально, но пока проблема не в этом):
@login_required
def accept(request):
    # Получаем объект пользователя
    user = request.user

    # Пытаемся получить объект Profile
    try:
        user_profile = Profile.objects.get(user=user)
    except Profile.DoesNotExist:
        # Если объекта Profile нет, создаем его
        user_profile = Profile.objects.create(user=user, agree=False)

    # Устанавливаем согласие в True
    user_profile.agree = True
    user_profile.save()

    return render(request, 'main/pricing.html', {'user_profile': user_profile})


Далее на странице html прописываю следующий код:
{% if user.is_authenticated %}
    {% if user_profile.agree %}
         <a class="silka" href="{% url 'proba' %}"><button type="button" class="sqrt7">Пробный период</button></a>
     {% else %}
           <a class="silka" href="{% url 'agreement' %}"><button type="button" class="sqrt7">Пробный период</button></a>
      {% endif %}
{% else %}
    <a class="silka" href="{% url 'register' %}"><button type="button" class="sqrt7">Пробный период</button></a>
{% endif %}


и он работает. Отображается верная ссылка для перехода. Однако, если я вернусь на главную страницу, и потом снова на страницу с ценами, то мне снова будет нужно соглашаться на пользовательское соглашение. (хотя запись в БД уже есть! но при возвращении {% if user_profile.agree %} выдает False. Что нужно сделать, чтобы условие продолжало работать при переходе между страницами?
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
@Andrew_Novikov Автор вопроса
Доперло. Можно ведь на прямую обращаться к профилю пользователя, а не через этот костыль user_profile.agree...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы