Django в чем ошибка?

Столкнулся с ошибкой, что при введении в поле поиска слова и при нажатии на найти вылетает ошибка "UnboundLocalError: local variable 'page_object' referenced before assignment". Что делать?

{% extends 'food/base_main.html' %}
{% load static %}

{% block title%}Рецепты{% endblock title%}

{% block nav %}
    {% if request.user.is_authenticated %}

                            <a href = "{% url 'main' %}"><li><button class = "nav_btn">Рецепты</button></li></a>
                            <li><button class = "nav_btn">Избранное</button></li>
                            <a href = "{% url 'create' %}"><li><button class = "nav_btn_">Создать</button></li></a>
                            <a href = "{% url 'profile' %}"><li class = "enter"><button class = 'enter_btn'>{{user.first_name}}</button></li></a>
                            <a href="{% url 'logout' %}"><li class = "reg"><button class = 'reg_btn'>Выход</button></li></a>
    {% else %}

                            <a href = "{% url 'main' %}"><li><button class = "nav_btn">Рецепты</button></li></a>
                            <li><button class = "nav_btn">Избранное</button></li>
                            <a href = "{% url 'create' %}"><li><button class = "nav_btn_">Создать</button></li></a>
                            <a href = "{% url 'authentication' %}"><li class = "enter"><button class = 'enter_btn'>Вход</button></li></a>
                            <a href="{% url 'registration' %}"><li class = "reg"><button class = 'reg_btn'>Регистрация</button></li></a>
    {% endif %}
{% endblock %}


{% block recept %}Рецепты{% endblock %}
{% block liked %}Избранные{% endblock %}
{% block crate %}Cоздать{% endblock %}

{% block search_form_ %}
    <form class = "search_form" action="{% url 'main' %}">
        <input class = "search_form_input" placeholder = "Найти рецепт" type = "search" name = "search" arial-label = "Найти рецепт">
        <button class = "search_btn" type = "submit">Найти</button>
    </form>

{% endblock %}

{% block content %}
        {% for card in page_object %}
        <a class = "recept_anim">
            <div class = "recept">
                            <div class="img_recept"><img class="main_img" src="images/images//{{ card.image }}">
                                <div class = 'info'>
                                    <h4 class = "product-name">{{ card.recipe_title }}</h4>
                                    <span class = "time_text"><img src = "{% static 'images_defolt/timer_01101101.png' %}" class = "time_img">{{ card.recipe_time }} мин.</span><br>
                                    <span class = "ingridients"><img src = "{% static 'images_defolt/food_for_card.png' %}"  class = "recept_img">{{ card.recipe_ingridients  }} ингридиента</span>
                                    <a href="{% url 'product_page'  card.id %}">
                                        <div class = "card_btns">
                                            <button class = "go_to_btn">Смотреть</button>
                                        </div>
                                    </a>
                                    <span class = "author"><img src = "{% static 'images_defolt/person_logo.png' %}" class = "person_img">{{ card.user.first_name }}  {{card.user.last_name}}</span>
                                </div>
                            </div>

            </div>
            {% endfor %}
{% endblock %}
{% block pagintion_page_to_jinja %}
        {% for p in page_object.paginator.page_range %}
            {% if page_object.number == p %}
                <li class = "pagination">
                    <span href="?page={{ p }}" class = "selected_btn_pagination">{{ p }}</span>
                </li>
            {% elif p >= page_object.number|add:-2 and p <= page_object.number|add:2 %}
                 <li class = "pagination">
                    <a href="?page={{ p }}" class = "pages_href">{{ p }}</a>
                 </li>
            {% endif %}
        {% endfor %}
{% endblock %}
from django.shortcuts import render, redirect
from .forms import FoodForm, RegistrationForm,LoginUserForm
from .models import Recipe
from django.contrib.auth import logout
from django.contrib.auth.views import LoginView, reverse_lazy
from django.http import Http404
from django.core.paginator import Paginator

def index(request):

    search_query = request.GET.get("search", "")
    if search_query:
        card_info = Recipe.objects.filter(recipe_title__icontains=search_query)
        paginator = Paginator(card_info, 20)

    else:
        card_info = Recipe.objects.all()
        paginator = Paginator(card_info, 20)
        page_number = request.GET.get("page")
        page_object = paginator.get_page(page_number)



    return render(request, "food/main_jinja.html", {
        "cards": card_info,
        "page_object": page_object
        })

def product_page(request, object_id):
    try:
        product = Recipe.objects.get(id=object_id)

    except:
        raise Http404("Рецепт не найден!")

    return render(request, "food/product_page_jinja.html", {"object": product})

def create(request):
    if request.method == "POST":
        form = FoodForm(request.POST, request.FILES)
        if form.is_valid():
            recipe = form.save(commit=False)
            recipe.user = request.user
            recipe.save()
            return render(request, 'food/true.html')
        else:
            return render(request, 'food/test.html')
    form = FoodForm()
    context = {
        "form": form
    }
    return render(request, "food/crate.html", context)


def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return render(request, 'food/succses_reg.html')
        else:
            return render(request, 'food/false_registration_jinja.html', {"form" : form})
    form = RegistrationForm()
    context = {
        'form': form
    }
    return render(request, 'food/registration_main.html', context)



class LoginUser(LoginView):
    form_class = LoginUserForm
    template_name = "food/auth_page.html"

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(**kwargs)
        return dict(list(context.items()))

    def get_success_url(self):
        return reverse_lazy("main")


def logout_from_site(request):
    logout(request)
    return redirect("authentication")
    # return render(request, "food/auth_page.html")


def profile(request):
    card_info = Recipe.objects.filter(user=request.user)
    return render(request, "food/profile.html", {"cards" : card_info})

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

Быстрое решение -> инициализировать переменную до ветвления (до if)

def index(request):
    page_object = None
    search_query = request.GET.get("search", "")
    if search_query:
        card_info = Recipe.objects.filter(recipe_title__icontains=search_query)
        paginator = Paginator(card_info, 20)

    else:
        card_info = Recipe.objects.all()
        paginator = Paginator(card_info, 20)
        page_number = request.GET.get("page")
        page_object = paginator.get_page(page_number)

    return render(request, "food/main_jinja.html", {
        "cards": card_info,
        "page_object": page_object
        })

При таком использовании, у вас переменная page_object существует во всей области видимости функции

Вернуться на верх