JavaScript из базы Django не работает при запуске

Я пытаюсь загрузить логотип клиента, когда пользователь входит в мое приложение. Функция JS не срабатывает, и я не вижу никакой информации в журналах.

Для этого я использую функцию представлений ниже, чтобы сгенерировать URL-адрес логотипа:

Взгляды:

def view_company_logo(request):

print("GETTING LOGO")

client = Client.objects.get(user=request.user)
logo = ""


try:
        logo = client.customer.first().logo.url + settings.MEDIA_URL
        print("GOT LOGO")

    except Exception as e:
        logo = ""
        print(e)
        print(f'ERROR FOR LOGO {e}')
    finally:
        return JsonResponse({"logo": logo}, safe=False)

Функция прикреплена по URL-адресу ниже:

url(r"^get/company_logo/$", views.view_company_logo),

Это вызывается в файле base.html, чтобы показать

  $(document).ready(function () {
  function get_company_logo() {
    log('TEST');

    $.ajax({
      url: '/get/company_logo/',
      method: 'GET',
      success: function (data) {
        return create_image(data['logo'])





      },
      error: function () {
        console.info('HERE IS THE ERROR!!!')
        log('HERE IS THE ERROR!!!')
      },
    
    })
  }

  function create_image(logo) {
    document.getElementById("logo").src = logo;

  }


  get_company_logo()

Что связано с источником этого изображения, которое генерируется при загрузке страниц:

      <img class = "img-square center" id = "logo" alt = "logo" style = "opacity: 1" height = "45" width = "125">

Может кто-нибудь сказать мне, почему изображение не загружается? Кажется, что функция никогда не вызывается, и я не знаю, почему.

Ваш оператор return возвращает значение из функции success. Он не возвращает значение из функции get_company_logo. Это ничего не возвращает.

Tim Roberts 27.07.2024 01:27

@TimRoberts Я обновил функцию, но это не сработало. Подскажите, пожалуйста, неправильно ли написано?

Doing Things Occasionally 27.07.2024 01:52

Если вы записываете данные в обратный вызов, правильный ли URL-адрес? Видите ли вы сообщения журнала вашей функции django?

Tim Roberts 27.07.2024 05:35

Нет, я ничего не вижу. @ТимРобертс

Doing Things Occasionally 27.07.2024 08:00

Вы можете показать, как вы выполняете маршрутизацию в Django.

Tim Roberts 27.07.2024 08:03

Я маршрутизирую через URL. Я добавил эту информацию в пост. Есть ли что-то еще, о чем вы спрашиваете? @ТимРобертс

Doing Things Occasionally 27.07.2024 08:26

Я ПЫТАЮСЬ помочь вам отладить это. Ваш запрос выполняется? Это вообще проникает в ваш код Джанго? Вызывается ли функция? У вас ошибка маршрутизации? Прежде чем вы сможете это исправить, вам нужно знать, где что-то идет не так. Пока что вы просто догадываетесь.

Tim Roberts 27.07.2024 08:29

@TimRoberts Я не верю, что функция вызывается, и не понимаю, где ошибка. Такова природа вопроса. Кажется, что функция JS не вызывается внутри функции загрузки $document.

Doing Things Occasionally 28.07.2024 00:56

Я не верю, что функция вызывается — ну, вам нужно придумать ответ ДА ​​или НЕТ. Вот чем хорош console.info. Вы видите «ТЕСТ» в журнале консоли?

Tim Roberts 28.07.2024 01:05

Я не вижу никакой информации в консоли. Функция не вызывается. Об этом говорилось в посте внизу. Пожалуйста, прочтите до конца. @ТимРобертс –

Doing Things Occasionally 28.07.2024 02:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы передаете значение URL-адреса мультимедиа. Хотя вам нужно добавить media_root для загрузки фотографии:

    logo = client.customer.first().logo.url
    print("GOT LOGO")
    return JsonResponse({"logo": logo + settings.MEDIA_URL}, safe=False)

Кроме того, лучше почистить свой код:

try:
    logo = client.customer.first().logo.url + settings.MEDIA_URL
    print("GOT LOGO")

except Exception as e:
    logo = ""
    print(e)
    print(f'ERROR FOR LOGO {e}')
finally:
    return JsonResponse({"logo": logo}, safe=False)

Это не сработало. Я думаю, что функция JS не срабатывает. Не могли бы вы сообщить мне, что я могу делать там не так?

Doing Things Occasionally 28.07.2024 00:57
Ответ принят как подходящий

У вас есть несколько проблем с вашим Javascript. Единственное, что должно быть в функции «готово», — это вызов get_company_logo. Остальные функции могут быть определены напрямую.

Это работает для меня:

<script src = "https://code.jquery.com/jquery-2.2.4.js">
</script>
<script>
function get_company_logo() {
    console.info('TEST');

    $.ajax({
      url: '/get/company_logo/',
      method: 'GET',
      success: function (data) {
        return create_image(data['logo'])
      },
      error: function () {
        console.info('HERE IS THE ERROR!!!')
        log('HERE IS THE ERROR!!!')
      },
    
    })
}

function create_image(logo) {
  document.getElementById("logo").src = logo;
}

$(document).ready(get_company_logo);

</script>

<img class = "img-square center" id = "logo" alt = "logo" style = "opacity: 1" height = "45" width = "125">

Другие вопросы по теме