Пример #1
0
def order_page(request, id):

    # Объявление начальных значений переменных
    order_img = Q()
    main_photo = Q()
    list_note = []
    order = None

    try:
        # Проверка принадлежности запрашиваемого заказа к текущему пользователю
        # Получения пользователя
        user = CustomUser.get_user(request)

        if user:
            # Получение заказа
            order = Order.get_order_by_client(id, user)

        if order != None:

            # Получаем список приложений данного ПО (ФАЙЛЫ, ФОТОГРАФИИ)
            if order.kind == "buy":
                software = Software.objects.get( order_software = id )

                #  Получение главного фото
                main_photo_query = software.get_main_photo()
                # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
                for photo in main_photo_query:
                    main_photo = photo

                order_img = software.get_addition()
            else:
                #  Получение главного фото
                main_photo_query = order.get_main_photo()
                # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
                for photo in main_photo_query:
                    main_photo = photo

                order_img = order.get_addition()

            # Исключения главного фото (main_photo) из списка фото
            if order_img:
                order_img = order_img.exclude(pk=main_photo.id)

            #  Для разрыва текста (скрытого и открытого)
            # Сплит строки по '\n' по первому вхождению - получаем массив элементов одной переменной
            if order.note:
                list_note = order.note.split('\n', 1)

            # Получение текущего пользователя 
            user = CustomUser.get_user(request)
            
            return render(request, 'order/order.html', {'order':order,  'user':user, 'list_note':list_note, 'order_img':order_img, 'main_photo':main_photo})

    except:
        raise Http404("Заказ не найден")

    raise Http404("Заказ не найден")
Пример #2
0
def render_block_software(request, soft_list):

    # Хэш классификаций ПО
    tags_dict = {}
    photo_dict = {}

    for soft in soft_list:

        soft_tags_list = soft.get_tags()

        soft_photo = soft.get_main_photo()

        # Добавляем ключ и значение в словарь
        tags_dict[soft.id] = soft_tags_list

        if soft_photo is not None:

            # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
            for s in soft_photo:
                photo_dict[soft.id] = s

    # Получение текущего пользователя
    user = CustomUser.get_user(request)

    # Получение списка тегов похожих ПО

    result = ''

    result = render_to_string('soft/pattern_block_software.html', {
        'soft_list': soft_list,
        'photo_dict': photo_dict,
        'user': user
    })
    return result
Пример #3
0
def chat(request, id):

    # Объявление начальных значений переменных
    order = None

    try:

        # Проверка принадлежности запрашиваемого заказа к текущему пользователю
        # Получения пользователя
        user = CustomUser.get_user(request)

        if user:
            # Получение заказа
            order = Order.get_order_by_client(id, user)

            # Получение пременных из запроса
            next_messages = request.GET.get('next', None)
            # count_messages = request.GET.get('count', None)

            # Тогда просто отрисовывается страница чата с полседними 20 сообщениями
            if next_messages == None:

                dbl.log("111" )
                next_messages = 0

                message_block, count = get_messages(request, order, next_messages=next_messages)

                next_messages = 20

                return render(request, 'order/chat.html', {'order':order, 'message_block':message_block})

            # Догрузка сообщений
            else:

                dbl.log("444444444444444444" )

                # Данные по умолчанию - код ответа
                data = {'status': 'error'}

                # dbl.log("111" )
                
                message_block, count = get_messages(request, order, next_messages=next_messages)

                next_messages = int(next_messages)+20
                dbl.log(str(next_messages) )
                data['status'] = 'success'
                data['next'] = next_messages
                data['count'] = count
                data['result'] = message_block
                dbl.log("10101001" )


                return HttpResponse(json.dumps(data), content_type='application/json')


    except Exception as error:
            pass
            dbl.log("Ошибка работы" + str(error))

    return render(request, 'order/chat.html', {'order':order, 'chat':chat})
Пример #4
0
def favourites(request):
    # Получения пользователя
    user = CustomUser.get_user(request)
    dbl.log("1")

    if user:
        dbl.log("1")
        favourites = Software.get_favourites_by_user(user)
        dbl.log("1"+str(favourites))

        # Словарь главных фото
        photo_dict = {}
        dbl.log("1")
        for soft in favourites:

            # Получение главного фото
            soft_photo = soft.get_main_photo()

            if soft_photo is not None:

                # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
                for s in soft_photo:
                    dbl.log("1")
                    photo_dict[soft.id] = s
        dbl.log("1")
        response= render(request, 'user/favourites.html', {'favourites':favourites, 'user':user, 'photo_dict':photo_dict})
        return response
Пример #5
0
def review_page(request, id):

    # Объявление начальных значений переменных
    similar_block = ""
    similar_tags_block = ""
    user = None

    try:

        # Получение текущего пользователя
        user = CustomUser.get_user(request)

        this_object = Review.objects.get(id=id)

        # Получаем список приложений данного отзыва
        review_img = this_object.get_addition()

        software = Software()
        photo_dict = {}

        if this_object.software is not None:

            software = Software.objects.get(id=this_object.software.id)

            if software:

                soft_photo = software.get_main_photo()

                if soft_photo is not None:
                    for s in soft_photo:
                        photo_dict[software.id] = s

                # Второстепенные объекты - похожие ПО
                similar_block = software_views.render_similars(
                    software, id_widget="same_software")
                similar_tags_block = software_views.render_similars_tags(
                    software)

    # except:
    #     raise Http404("Отзыв не найден")

    except Exception as error:
        pass
        dbl.log("Ошибка работы с отзывом" + str(error))

    rating = [1, 2, 3, 4, 5]
    return render(
        request, 'review/review.html', {
            'review': this_object,
            'rating': rating,
            'review_img': review_img,
            'software': software,
            'photo_dict': photo_dict,
            'similar_block': similar_block,
            'similar_tags_block': similar_tags_block,
            'user': user
        })
Пример #6
0
def favourites_clean(request):
    # Получения пользователя
    user = CustomUser.get_user(request)

    if user:
        favourites = Favourite.get_favourites_by_user(user)
        for fav in favourites:
            fav.delete()
        return render(request, 'user/favourites.html', {'favourites':None})
Пример #7
0
def review_create(request):

    # Получение данных из формы в переменную
    form = ReviewForm(request.POST)
    dbl.log("Форма" + str(form))

    # global list_crumb_for_software
    list_crumb_for_software = [['Главная', 'main:index'],
                               ['Отзывы', 'review:list_review']]
    #  Получение данных из формы и сохранение в бд
    if request.method == "POST":
        try:

            # Проверка принадлежности запрашиваемого заказа к текущему пользователю
            # Получения пользователя
            user = CustomUser.get_user(request)

            # Здесь автоматически проверяются все поля формы методами clean_...
            if form.is_valid():

                new_review = Review()
                new_review.kind = 'com'
                if user:
                    new_review.client = user

                new_review.content = form.cleaned_data['content']
                new_review.star = form.cleaned_data['star']
                new_review.name = form.cleaned_data['name']
                new_review.email_phone = form.cleaned_data['email_phone']
                new_review.save()

                addition_file = request.FILES.getlist('file')

                # Сохранение приложений файлов к отзыву (происходит тогда, когда все поля валидны)
                for file in addition_file:
                    dbl.log("777")
                    new_addition = Review_Addition()

                    new_addition.review = new_review
                    new_addition.photo = file
                    new_addition.save()

                return redirect('review:review_success')

        except Exception as error:
            pass
            dbl.log("Ошибка работы с отзывом" + str(error))

    rating = [5, 4, 3, 2, 1]
    return render(request, 'review/review_create.html', {
        'form': form,
        'rating': rating,
        'list_crumb': list_crumb_for_software
    })
Пример #8
0
def add_download(request, software_id):

    message = ""
    download_link = ""
    list_crumb = []

    try:

        # Получения пользователя
        user = CustomUser.get_user(request)

        if user:

            software = Software.objects.get(id=int(software_id))

            Download.objects.get_or_create(client=user, software=software)

            message = "Благодарим вас за доверие! Через 5 секунд начнется автоматическая загрузка."

            # download_url = software.file
            # download_url = '/softwares/download?id='+str(software.id)
            download_url = '/softwares/' + str(
                software.id) + '/download/send_file'

            dbl.log(str(download_url))
            h1 = "Успешная загрузка"
            list_crumb = [['Главная', 'software:catalog'],
                          ['Каталог', 'software:catalog'],
                          [
                              software.name, 'software:software_page',
                              software.id
                          ],
                          [
                              'Скачать бесплатно',
                              'software:software_download', software.id
                          ]]

            return render(
                request, 'common/successfull.html', {
                    'message': message,
                    'download_link': download_link,
                    'h1': h1,
                    'list_crumb': list_crumb,
                    'download_url': download_url
                })

    except Exception as error:
        pass
        dbl.log("Ошибка работы " + str(error))

    message = "К сожалению, что-то пошло не так. Возможно вам стоит попробовать в следующий раз."

    return render(request, 'common/fail.html', {'message': message})
Пример #9
0
def downloads(request):
    # Получения пользователя
    user = CustomUser.get_user(request)

    if user:
        downloads = Software.get_downloads_by_user(user)

        # Словарь главных фото
        photo_dict = {}

        for soft in downloads:

            # Получение главного фото
            soft_photo = soft.get_main_photo()

            if soft_photo is not None:

                # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
                for s in soft_photo:
                    photo_dict[soft.id] = s

        response= render(request, 'user/downloads.html', {'downloads':downloads, 'user':user, 'photo_dict':photo_dict})
        return response
Пример #10
0
def software_page(request, id):

    # Объявление начальных значений переменных
    # Хэш классификаций ПО
    classif = {}
    software = Software()
    software_img = Q()
    main_photo = Q()
    software_tag = Q()
    list_descr = []
    similar_block = ""
    similar_tags_block = ""
    discussion_comment_block = ""

    # Строка фильтра для хлебных крошек
    str_filter_for_breadcrumb = ""

    try:
        software = Software.objects.get(id=id)

        #  Получение главного фото
        main_photo_query = software.get_main_photo()
        dbl.log("сойт 2  " + str(main_photo_query))

        # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
        for photo in main_photo_query:
            main_photo = photo

        dbl.log("сойт 3  " + str(main_photo))

        # Получаем список приложений данного ПО (ФАЙЛЫ, ФОТОГРАФИИ)
        software_img = software.get_addition()

        dbl.log("сойт 4  " + str(software_img))

        # Исключения главного фото (main_photo) из списка фото
        if software_img:
            software_img = software_img.exclude(pk=main_photo.id)

        # Получаем список тегов данного ПО
        software_tag = software.get_tags()

        #  Для разрыва текста (скрытого и открытого)
        # Сплит строки по '\n' по первому вхождению - получаем массив элементов одной переменной
        list_descr = software.description.split('\n', 1)

        # Получаем список классификаций данного ПО
        classif, str_filter_for_breadcrumb = software.get_classifications()

        # Второстепенные объекты - похожие ПО
        similar_block = render_similars(software, id_widget="same_software")
        similar_tags_block = render_similars_tags(software)
        discussion_comment_block = render_discussion_comment(software,
                                                             request,
                                                             limit=5)

        # Получение текущего пользователя
        user = CustomUser.get_user(request)

        return render(
            request, 'soft/software.html', {
                'software': software,
                'software_img': software_img,
                'main_photo': main_photo,
                'classif': classif,
                'list_descr': list_descr,
                'software_tag': software_tag,
                'similar_block': similar_block,
                'similar_tags_block': similar_tags_block,
                'discussion_comment_block': discussion_comment_block,
                'user': user,
                'str_filter_for_breadcrumb': str_filter_for_breadcrumb
            })

    # except:
    #     raise Http404("ПО не найдено")

    except Exception as error:
        pass
        dbl.log("Ошибка работы " + str(error))

    # return render(request, 'soft/software.html', {'software':software, 'software_img':software_img, 'main_photo':main_photo, 'classif':classif,
    # 'list_descr':list_descr, 'software_tag':software_tag, 'similar_block':similar_block, 'similar_tags_block':similar_tags_block,
    # 'discussion_comment_block':discussion_comment_block})

    raise Http404("ПО не найдено")
Пример #11
0
def catalog(request):
    soft_list = Software.objects.all().filter(date_of_delete=None,
                                              visibility=True)

    dbl.log("mmmmm")
    dbl.log("бббб" + str(request))

    # Получение пременных из формы поиска
    search_query_name = request.GET.get('soft_name', '')
    search_query_tags = request.GET.get('soft_tags', '')
    soft_price = request.GET.get('soft_price', '')
    soft_pricefrom = request.GET.get('soft_pricefrom', '')
    soft_priceto = request.GET.get('soft_priceto', '')
    modification = request.GET.get('modification', '')
    sort_param = request.GET.get('sort', '')
    if sort_param is None:
        sort_param = ""
    count = request.GET.get('count', '10')
    if count == "":
        count = 10
    count = int(count)
    try:
        page = int(request.GET.get('page', '1'))
    except:
        page = 1

    # Словарь для фильтра классификаций
    classification_dict = {}
    vertical_widget = None
    list_tags = []

    # Перебор всех пришедших аргументов
    for req in request.GET.items():

        # Проверка валидности значения имени (классификации)
        if re.match(r'classification_(\d+)_value_(\d+)', str(req[0])):

            # Проверка значения поля формы поиска
            if str(req[1]) != "" and str(req[1]).isdigit():

                # Добавление значения в словарь
                classification_dict[str(req[0])] = str(req[1])

    #  Перменная составления запроса с фильтрами по классификациям
    cond = Q()

    # Перебор словаря классификаций
    for cl_val in classification_dict.values():

        # Добавление условия фильтрации
        cond |= Q(classification_value=int(cl_val))

    # Фильтрация списка всех ПО по выбранным классификациям
    soft_list = soft_list.filter(cond)

    # Исключение повторений ПО
    soft_list = soft_list.order_by('id').distinct()

    # Фильтрация по цене (бесплатные ПО)
    if soft_price == "soft_price_free":
        soft_list = soft_list.filter(price=0)

    # Фильтрация по цене (платные ПО)
    if soft_price == "soft_price_paid":
        soft_list = soft_list.exclude(price=0)

    # Фильтрация по начальной цене
    if soft_pricefrom:
        soft_list = soft_list.filter(price__gte=soft_pricefrom)

    # Фильтрация по конечной цене
    if soft_priceto:
        soft_list = soft_list.filter(price__lte=soft_priceto)

    # Фильтрация по наименованию ПО
    if search_query_name:
        soft_list = soft_list.filter(name__icontains=search_query_name)

    # Фильтрация по полю доработки
    if modification:
        soft_list = soft_list.filter(modification=True)

    # Фильтрация по списку тегов ПО
    if search_query_tags:

        # Сплит строки запроса
        dbl.log("ввввввв  " + str(search_query_tags))
        list_tags = re.split(r'[ ,]+', search_query_tags)
        dbl.log("ртртртрт  " + str(list_tags))

        # Фильтрация ПО по списку тегов
        soft_list = Software.get_softwares_by_tags(soft_list, list_tags)
        dbl.log("ddddddddd " + str(soft_list))

    # Хэш классификаций ПО
    tags_dict = {}
    photo_dict = {}
    vertical_widget_photo_dict = {}

    for soft in soft_list:

        soft_tags_list = soft.get_tags()

        soft_photo = soft.get_main_photo()

        # Добавляем ключ и значение в словарь
        tags_dict[soft.id] = soft_tags_list

        if soft_photo is not None:

            # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
            for s in soft_photo:
                photo_dict[soft.id] = s

    # Получение текущего пользователя
    user = CustomUser.get_user(request)

    # Получение списка всех видов ПО
    classifications = Classification.objects.all().filter(
        date_of_delete=None, visibility=True).order_by('id')

    # if request.is_ajax():
    #     dbl.log("hhhh")
    #     for soft in soft_list:
    #         dbl.log("---  " + str(soft))
    #     response = sort( request, soft_list)
    #     dbl.log("hhhh "+str(response))
    #     return response

    # Сортировка, показать по, перейти на страницу
    soft_list = util.views.sort_show_by(soft_list, sort_param, count, page)

    # Составление вертикального виджета
    # Список типов виджетов
    choice_widget_list = ['popular', 'new']
    # Выбор типа
    choice_widget = random.choice(choice_widget_list)
    # dbl.log("виджеты " + str(choice_widget))

    # Популярные ПО
    if choice_widget == "popular":
        vertical_widget_all = Software.get_popular()
        # dbl.log("виджеты " + str(vertical_widget_all))

        if len(vertical_widget_all) > 6:
            vertical_widget = random.sample(vertical_widget_all, 6)
        else:
            vertical_widget = vertical_widget_all
        # dbl.log("виджеты " + str(vertical_widget))

    # Новые ПО
    elif choice_widget == "new":
        vertical_widget = Software.get_new()

    for soft in vertical_widget:

        vertical_widget_soft_photo = soft.get_main_photo()

        if vertical_widget_soft_photo is not None:

            # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
            for s in vertical_widget_soft_photo:
                vertical_widget_photo_dict[soft.id] = s

    response = render(
        request, 'soft/catalog.html', {
            'soft_list': soft_list,
            'photo_dict': photo_dict,
            'count': count,
            'sort_param': sort_param,
            'page': page,
            'modification': modification,
            'search_query_name': search_query_name,
            'soft_price': soft_price,
            'soft_pricefrom': soft_pricefrom,
            'list_tags': list_tags,
            'soft_priceto': soft_priceto,
            'tags_dict': tags_dict,
            'classifications': classifications,
            'classification_dict': classification_dict,
            'user': user,
            'choice_widget': choice_widget,
            'vertical_widget': vertical_widget,
            'vertical_widget_photo_dict': vertical_widget_photo_dict
        })
    return response
Пример #12
0
def message_add_for_chat(request, id):

    order = None
    chat = None
    result='' # Переменная шаблона ответа
    list_messages= [] # лист сообщений
    dict_addition_for_message = {} # словарь приложений к каждому сообщению ( id_сообщения: массив приложений )

    dbl.log("111" )

    if request.method == 'POST':
        form = ChatForm(request.POST, request.FILES)
        # dbl.log("222" )
        try:
            # Проверка принадлежности запрашиваемого заказа к текущему пользователю
            # Получения пользователя
            user = CustomUser.get_user(request)

            # dbl.log("333" )
            # Данные по умолчанию - код ответа
            data = {'status': 'error'}

            if user:
                # Получение заказа
                order = Order.get_order_by_client(id, user)


            if form.is_valid():

                # dbl.log("444" )
                new_chat = Chat()


                addition_file = request.FILES.getlist('file')


                new_chat.order = order

                # new_chat.order = form.cleaned_data['order_id']
                new_chat.content = form.cleaned_data['content']
                new_chat.sender = "cl"

                # Сохранение сообщения чата (происходит тогда, когда все поля валидны)
                new_chat.save()
                dbl.log("55" )
                # Добавление сообщения в лист
                list_messages.append(new_chat)
                dbl.log("66" )
                # Лист приложений 
                list_additions = []

                # Сохранение приложений файлов к сообщению чата (происходит тогда, когда все поля валидны)
                for file in addition_file:
                    dbl.log("777" )
                    new_addition = Chat_Addition()

                    new_addition.chat = new_chat
                    new_addition.file = file
                    new_addition.save()

                    # Добавление приложения в массив
                    list_additions.append(new_addition)

                # Добавление элемента в словарь 
                # dict_addition_for_message[new_chat.pk] = list_additions
                dict_addition_for_message[new_chat] = list_additions
                dbl.log("888" )
                # Составление шаблона сообщения с приложениями
                message_block = render_message_block( request, dict_addition_for_message )
                dbl.log("999" )

                data['status'] = 'success' 
                data['result'] = message_block
                dbl.log("10101001" )

            else: # !!! Если ошибка, то отправляем ошибочные данные
                # !!! Быстро и некрасиво добавляем ошибки в ответ. Желательно для этого сделать отдельную функцию, так как тебе в нескольких местах придется этот код повторять
                # data['error_text'] = '' # !!!!
                # for v in form.errors.values(): # !!!!
                #     data['error_text'] += v[0] + "<br>" # !!!!
                data['status'] = 'error' # !!!!

            return HttpResponse(json.dumps(data), content_type='application/json')


                

        except Exception as error:
            pass
            dbl.log("Ошибка работы" + str(error))


    return redirect('order:chat', id=order.id )
Пример #13
0
def orders(request):

    # Получения пользователя
    user = CustomUser.get_user(request)

    if user:

        # Получение неотфильтрованного списка заказов клиента
        orders = Order.get_orders_by_user(user)
        orders = orders.filter(date_of_delete=None, visibility=True)

        # Получение данных из формы в переменную
        form = Search_OrderForm(request.GET)

        if form.is_valid():
            try:

                # Получение пременных из формы поиска
                date_type = form.cleaned_data['date_type']
                date_from = form.cleaned_data['date_from']
                date_to = form.cleaned_data['date_to']
                month = form.cleaned_data['month']
                status_order = form.cleaned_data['status_order']
                type_order = form.cleaned_data['type_order']
                type_soft = form.cleaned_data['type_soft']
                number = form.cleaned_data['number']
                name = form.cleaned_data['name']
                unread_messages = form.cleaned_data['unread_messages']
                sort_param = form.cleaned_data['sort']
                if sort_param is None:
                    sort_param = ""
                count = form.cleaned_data['count']
                if count == "":
                    count = 10
                count = int(count)
                try:
                    page = int(form.cleaned_data['page'])
                except:
                    page = 1

                
                # Получение поля фильтрации по типу даты
                date_type_for_db = ""

                if date_type == 'date_type_buy':

                    date_type_for_db = "date"

                elif date_type == 'date_type_start':

                    date_type_for_db = "starting_date"

                elif date_type == 'date_type_end':

                    date_type_for_db = "ending_date"

                # Фильтрация по дате (при выборе типа даты поиска)
                if date_type and date_type != 'date_type_select_not_selected':

                    # Фильтрация по дате начала фильтрации
                    if date_from:

                        date_from_for_db = datetime.datetime.strptime(date_from, '%d.%m.%Y')
                        field_name = date_type_for_db+'__gte'

                        # Переменная вида : {поле в бд для фильтрации: значение фильтра}
                        kw = {field_name: date_from_for_db}
                        orders = orders.filter(**kw)

                    # Фильтрация по дате окончания фильтрации
                    if date_to:
                        
                        date_to_for_db = datetime.datetime.strptime(date_to, '%d.%m.%Y')
                        field_name = date_type_for_db+'__lte'

                        # Переменная вида : {поле в бд для фильтрации: значение фильтра}
                        kw = {field_name: date_to_for_db}
                        orders = orders.filter(**kw)

                    # Фильтрация по месяцу
                    if month and month != '0':

                        field_name = date_type_for_db+'__month'

                        # Переменная вида : {поле в бд для фильтрации: значение фильтра}
                        kw = {field_name: month}
                        orders = orders.filter(**kw)

                # Фильтрация по типу заказа
                if type_order:

                    # Получение типа заказа
                    type_order_value = type_order.split('type_order_')
                    orders = orders.filter(kind=type_order_value[1])

                #  СКОРЕЕ ВСЕГО НУЖНО ЭТО ПЕРЕДЕЛАТЬ ! ТАК КАК НАЗВАНИЯ ВИДА ПО могут измениться.
                # Фильтрация по типу ПО
                if type_soft and type_soft != 'type_soft_all':

                    type_soft_for_db = ""

                    if type_soft == 'type_soft_desc':

                        type_soft_for_db = "Настольное приложение"

                    elif type_soft == 'type_soft_site':

                        type_soft_for_db = "Сайт"

                    elif type_soft == 'type_soft_mobile':

                        type_soft_for_db = "Мобильное приложение"

                    orders = orders.filter(type_soft=type_soft_for_db)

                # Фильтрация по номеру(id) заказа
                if number and str(number).isdigit():
                    orders = orders.filter(pk=int(number))

                # Фильтрация по наименованию заказа
                if name:
                    orders = orders.filter(name__icontains=name)

                # Сортировка, показать по, перейти на страницу
                orders = util.views.sort_show_by(orders, sort_param, count, page )

            except Exception as error:
                pass

            # ЗДЕСЬ НУЖНО БУДЕТ СДЛЕАТЬ РЕДИРЕКТ НА ОБЩУЮ СТРАНИЦУ С ОПИСАНЕИМ ОШИБКИ И ССЫЛКАМИ НА ЛК, КАТАЛОГ И ТД
                dbl.log("Ошибка работы с заказами" + str(error))

        return render(request, 'order/orders.html', {'orders':orders, 'form':form, 'user':user})

    else:
        
        return redirect('software:catalog')