Я делаю цикл для отображения всех песен на главной странице моего веб-сайта потоковой передачи музыки с помощью карусели, но это не работает (он ничего не отображает, но в моей базе данных около 10 песен). Как я могу это исправить? Это мой HTML-код:
<div id = "All-songs" style = "padding: 5px">
<h2>All Songs</h2>
<div class = "main-carousel" data-flickity='{"groupCells":5 , "contain": true, "pageDots": false, "draggable": false, "cellAlign": "left", "lazyLoad": true}'>
{% for i in allsongs %}
<div class = "carousel-cell">
<section class = "main_song">
<div class = "song-card">
<div class = "containera">
<img src = "{{i.image}}" id = "A_{{i.id}}" alt = "song cover">
<div class = "overlaya"></div>
<div>
<a class = "play-btn" href = "{{i.preview_url}}" id = "{{i.id}}"><i> class = "fas fa-play-circle"></i></a>
{% if user.is_authenticated %}
<div class = "add-playlist-btn">
<a id = "W_{{i.song_id}}" title = "Add to Playlist" onclick = "showDiv(this)"></a>
</div>
{% endif %}
</div>
</div>
</div>
<div>
<p class = "songName" id = "B_{{i.id}}">{{i.name}}</p>
</div>
<p class = "artistName">{{i.singer1}}</p>
</section>
</div>
{% endfor %}
</div>
</div>
это view.py:
def allSongs(request):
allsongs = list(Song.objects.all())
random.shuffle(allsongs)
return render(request, 'allSongs.html', {'allsongs': allsongs)
а это models.py:
class Song(models.Model):
song_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
artist = models.CharField(max_length=50)
album = models.CharField(max_length=50, blank=True)
genre = models.CharField(max_length=20, blank=True, default='Album')
song = models.FileField(upload_to = "media/songs/", validators=[FileExtensionValidator(allowed_extensions=['mp3', 'wav'])], default = "name")
image = models.ImageField(upload_to = "media/songimage/", validators=[FileExtensionValidator(allowed_extensions=['jpeg', 'jpg', 'png'])], default = "https://placehold.co/300x300/png")
data = models.DateTimeField(auto_now=False, auto_now_add=True)
slug = models.SlugField(unique=True)
def __str__(self):
return self.name
class Meta:
ordering = ['name']
В вашем views.py вы можете использовать print, чтобы увидеть, что содержит ваша переменная allsongs. Вы можете использовать блок if, чтобы увидеть, что вы получаете в шаблоне. Вот так: {% if allsongs %} <p>Found {{ allsongs|length }} songs.</p> {% else %} <p>No songs found.</p> {% endif %}
ОК, отображается сообщение «Песни не найдены». я делал ошибку
Тогда я думаю, у вас нет песен в базе данных.
да, у меня 12 песен...
если песни не отображаются, возможно, что-то не так с вашей базой данных. Возможно, вы добавляете песни в другую базу данных. Какую базу данных вы используете? Если SQLite, то он может создать файл в другой папке, и вы проверите неправильный файл. Но сначала вы можете использовать print(), чтобы проверить, что вы получаете с Song.objects.all()






Я решил проблему, интегрируя представление allSongs (в приложенииviews.py) с представлением домашней страницы (в представлении проектаview.py) следующим образом:
def homepage(request):
songs = Song.objects.all()
return render(request, 'homepage.html', {'songs': songs})
На первый взгляд, я не понимаю, почему это не видно. Можете ли вы проверить, заполнен ли
allsongsтем, что вы хотите? Кроме того, вы можете добавить проверку наличия элементовallsongsи посмотреть, есть ли проблема. Также у вас неверно написан тегi:<i> class = "fas fa-play-circle"></i>.