Как управлять данными JSON в javascript pass form django model?
Мне нужно динамически отображать аудио на моем сайте. Аудио представляет собой путь к файлу, хранящийся в модели Django.
Djanog Model:
class audio(models.Model):
instrumentId = models.OneToOneField(instrument, on_delete=models.CASCADE, primary_key=True)
location = models.FileField()
Я передаю данные через view.py в json-данные, чтобы мой скрипт мог прочитать данные.
view.py, PostJsonListView получает данные из модели и генерирует json-данные, testView подключается к html, отображая аудиозаписи
class PostJsonListView(View):
def get(self, *args, **kwargs):
print(kwargs)
#upper is to get the number from the js file to set a upper boundry
upper = kwargs.get('num_aduios') #intial state be 3
lower = upper - 3
#pass in the audio in to the list [lower:upper] use to set boundry
audios = list(audio.objects.values()[lower:upper])
#comfirmation of no more audi to load
audio_size = len(audio.objects.values())
size = True if upper >= audio_size else False
return JsonResponse({'data':audios, 'max': size}, safe=False)
class testView(TemplateView):
template_name = 'frontend/testView.html'
Javascript, который передает данные, после нажатия кнопки он отображает еще три данных
console.log('HELLO')
const aduiosBox = document.getElementById('audio-box') //get the div audio-box
const nextBtn = document.getElementById('next-btn')
let visible = 3
const handleGetData = () =>{
$.ajax({
type: 'GET',
url: `/json/${visible}/`,
success: function(response)
{
max_size = response.max
//getting all the data and display in the console
const data = response.data
data.map(post=>{
console.log(post)
aduiosBox.innerHTML +=
//how to get the location right?
`
<div class="card p-3 mt-3 mb-3">
<audio controls>
<source src= ${post.location} type="audio/wav">
</audio>
</div>
`
})
//check if the display size reach maxium
if(max_size){
console.log('done')
}
},
error:function(error){
console.log(error)
}
})
}
handleGetData()
//event listenrs
nextBtn.addEventListener('click', ()=>{
visible += 3
handleGetData()
})
Здесь путь к аудио был из home/sound1.wav. В другом примере, где я также указываю путь к аудио объекту, путь был /sounds/sounds1.wav
view.py для рабочего примера
def survey(request):
if request.method == 'POST': #if something is post to the server, reference to HTML form method == post
form = rateForm(request.POST)
if form.is_valid():
form.save()
form = rateForm()
wavFile = audio.objects.all()
return render(request, "frontend/audio.html",{
'wavFile': wavFile,
'form': form,
})
Путь к файлу моего приложения Django
В заключение, я полагаю, что веб-сайт не может получить правильный путь к файлу. home/sound1.wav VS sounds/sound1.wav. Как я могу сделать так, чтобы код Javascript мог получить правильный путь для отображения звука на сайте?
Я решил эту проблему, исправив директорию моего аудио файла. Для тех, кто задается этим вопросом, следует посмотреть, что было сделано в вашем файле setting.py для директории хранения данных, к которой вы хотели получить доступ