Я пытаюсь загрузить логотип клиента, когда пользователь входит в мое приложение. Функция 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">
Может кто-нибудь сказать мне, почему изображение не загружается? Кажется, что функция никогда не вызывается, и я не знаю, почему.
@TimRoberts Я обновил функцию, но это не сработало. Подскажите, пожалуйста, неправильно ли написано?
Если вы записываете данные в обратный вызов, правильный ли URL-адрес? Видите ли вы сообщения журнала вашей функции django?
Нет, я ничего не вижу. @ТимРобертс
Вы можете показать, как вы выполняете маршрутизацию в Django.
Я маршрутизирую через URL. Я добавил эту информацию в пост. Есть ли что-то еще, о чем вы спрашиваете? @ТимРобертс
Я ПЫТАЮСЬ помочь вам отладить это. Ваш запрос выполняется? Это вообще проникает в ваш код Джанго? Вызывается ли функция? У вас ошибка маршрутизации? Прежде чем вы сможете это исправить, вам нужно знать, где что-то идет не так. Пока что вы просто догадываетесь.
@TimRoberts Я не верю, что функция вызывается, и не понимаю, где ошибка. Такова природа вопроса. Кажется, что функция JS не вызывается внутри функции загрузки $document.
Я не верю, что функция вызывается — ну, вам нужно придумать ответ ДА или НЕТ. Вот чем хорош console.info
. Вы видите «ТЕСТ» в журнале консоли?
Я не вижу никакой информации в консоли. Функция не вызывается. Об этом говорилось в посте внизу. Пожалуйста, прочтите до конца. @ТимРобертс –
Вы передаете значение 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 не срабатывает. Не могли бы вы сообщить мне, что я могу делать там не так?
У вас есть несколько проблем с вашим 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">
Ваш оператор return возвращает значение из функции
success
. Он не возвращает значение из функцииget_company_logo
. Это ничего не возвращает.