Невозможно отобразить изображение с помощью JavaScript из Django Base
Я пытаюсь заставить логотип клиента загружаться, когда пользователь входит в мое приложение. Для этого я использую приведенную ниже функцию views для создания url логотипа:
Просмотров:
def view_company_logo(request):
print("GETTING LOGO")
client = Client.objects.get(user=request.user)
logo = ""
try:
logo = client.customer.first().logo.logo.url
print("GOT LOGO")
return JsonResponse({"logo": logo, "media_url": settings.MEDIA_URL}, safe=False)
except Exception as e:
print(e)
print(f'ERROR FOR LOGO {e}')
return JsonResponse({"logo": logo}, safe=False)
Функция прикреплена по ссылке ниже:
url(r"^get/company_logo/$", views.view_company_logo),
Это вызывается в файле base.html для того, чтобы показать
$(document).ready(function () {
function get_company_logo() {
console.log('HERE SEAN!!!!!!!');
log('TEST');
$.ajax({
url: '/get/company_logo/',
method: 'GET',
success: function (data) {
return create_image(data['logo'])
},
error: function () {
console.log('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">
Может ли кто-нибудь сказать мне, почему изображение не загружается? Кажется, что функция никогда не вызывается, и я не уверен, почему.
Вы передаете значение медиа 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)
У вас несколько проблем в вашем Javascript. Единственное, что должно быть в функции "ready", - это вызов get_company_logo
. Остальные функции могут быть определены напрямую.
Это работает для меня:
<script src="https://code.jquery.com/jquery-2.2.4.js">
</script>
<script>
function get_company_logo() {
console.log('TEST');
$.ajax({
url: '/get/company_logo/',
method: 'GET',
success: function (data) {
return create_image(data['logo'])
},
error: function () {
console.log('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">