我無法在主頁上顯示所有用戶的歌曲。我想直接在主頁上顯示它們,例如Youtube或其他音頻流媒體網站,而無需登錄。我試過objects.all()
沒有任何反應。在沒有登錄html頁面的情況下顯示django中所有用戶的對象
請告訴我要寫什麼views.py
以及html
模板homepage.html
。我正在使用Python 3
和django 1.10
。
這是我的models.py:
class Album(models.Model):
user = models.ForeignKey(User, default=1)
artist = models.CharField(max_length=250)
album_title = models.CharField(max_length=500)
genre = models.CharField(max_length=100)
album_logo = models.FileField()
is_favorite = models.BooleanField(default=False)
def __str__(self):
return self.album_title + ' - ' + self.artist
class Song(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
song_title = models.CharField(max_length=250)
audio_file = models.FileField(default='')
is_favorite = models.BooleanField(default=False)
def __str__(self):
return self.song_title
這是我的views.py(不是所有的顯示):
def create_album(request):
if not request.user.is_authenticated():
return render(request, 'music/login.html')
else:
form = AlbumForm(request.POST or None, request.FILES or None)
if form.is_valid():
album = form.save(commit=False)
album.user = request.user
album.album_logo = request.FILES['album_logo']
file_type = album.album_logo.url.split('.')[-1]
file_type = file_type.lower()
if file_type not in IMAGE_FILE_TYPES:
context = {
'album': album,
'form': form,
'error_message': 'Image file must be PNG, JPG, or JPEG',
}
return render(request, 'music/create_album.html', context)
album.save()
return render(request, 'music/detail.html', {'album': album})
context = {
"form": form,
}
return render(request, 'music/create_album.html', context)
def create_song(request, album_id):
form = SongForm(request.POST or None, request.FILES or None)
album = get_object_or_404(Album, pk=album_id)
if form.is_valid():
albums_songs = album.song_set.all()
for s in albums_songs:
if s.song_title == form.cleaned_data.get("song_title"):
context = {
'album': album,
'form': form,
'error_message': 'You already added that song',
}
return render(request, 'music/create_song.html', context)
song = form.save(commit=False)
song.album = album
song.audio_file = request.FILES['audio_file']
file_type = song.audio_file.url.split('.')[-1]
file_type = file_type.lower()
if file_type not in AUDIO_FILE_TYPES:
context = {
'album': album,
'form': form,
'error_message': 'Audio file must be WAV, MP3, or OGG',
}
return render(request, 'music/create_song.html', context)
song.save()
return render(request, 'music/detail.html', {'album': album})
context = {
'album': album,
'form': form,
}
return render(request, 'music/create_song.html', context)
def index(request):
if not request.user.is_authenticated():
return render(request, 'music/homepage.html')
else:
albums = Album.objects.filter(user=request.user)
song_results = Song.objects.all()
query = request.GET.get("q")
if query:
albums = albums.filter(
Q(album_title__icontains=query) |
Q(artist__icontains=query)
).distinct()
song_results = song_results.filter(
Q(song_title__icontains=query)
).distinct()
return render(request, 'music/index.html', {
'albums': albums,
'songs': song_results,
})
else:
return render(request, 'music/index.html', {'albums': albums})
def logout_user(request):
logout(request)
form = UserForm(request.POST or None)
context = {
"form": form,
}
return render(request, 'music/login.html', context)
def login_user(request):
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
albums = Album.objects.filter(user=request.user)
return render(request, 'music/index.html', {'albums': albums})
else:
return render(request, 'music/login.html', {'error_message': 'Your account has been disabled'})
else:
return render(request, 'music/login.html', {'error_message': 'Invalid login'})
return render(request, 'music/login.html')
def register(request):
form = UserForm(request.POST or None)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.save()
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
albums = Album.objects.filter(user=request.user)
return render(request, 'music/index.html', {'albums': albums})
context = {
"form": form,
}
return render(request, 'music/register.html', context)
def songs(request, filter_by):
if not request.user.is_authenticated():
return render(request, 'music/login.html')
else:
try:
song_ids = []
for album in Album.objects.filter(user=request.user):
for song in album.song_set.all():
song_ids.append(song.pk)
users_songs = Song.objects.filter(pk__in=song_ids)
if filter_by == 'favorites':
users_songs = users_songs.filter(is_favorite=True)
except Album.DoesNotExist:
users_songs = []
return render(request, 'music/songs.html', {
'song_list': users_songs,
'filter_by': filter_by,
})
class HomePage(generic.ListView):
template_name = 'music/homepage.html'
def get_queryset(self):
return Song.objects.all()
urls.py:
admin.autodiscover()
app_name = 'music'
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^register/$', views.register, name='register'),
#all auth urls
url(r'^accounts/', include('allauth.urls')),
#Admin Urls
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^admin/', admin.site.urls),
url(r'^accounts/', include('allauth.urls')),
url(r'^login_user/$', views.login_user, name='login_user'),
url(r'^logout_user/$', views.logout_user, name='logout_user'),
url(r'^(?P<album_id>[0-9]+)/$', views.detail, name='detail'),
url(r'^(?P<song_id>[0-9]+)/favorite/$', views.favorite, name='favorite'),
url(r'^songs/(?P<filter_by>[a-zA_Z]+)/$', views.songs, name='songs'),
url(r'^create_album/$', views.create_album, name='create_album'),
url(r'^(?P<album_id>[0-9]+)/create_song/$', views.create_song, name='create_song'),
url(r'^(?P<album_id>[0-9]+)/delete_song/(?P<song_id>[0-9]+)/$', views.delete_song, name='delete_song'),
url(r'^(?P<album_id>[0-9]+)/favorite_album/$', views.favorite_album, name='favorite_album'),
url(r'^(?P<album_id>[0-9]+)/delete_album/$', views.delete_album, name='delete_album'),
]
我想要的方式是將index.html作爲登錄後的第一頁,並將homepage.html作爲登錄前的第一頁。 – Swikar
然後只是在views.index中交換名稱 – Bijoy
它沒有工作。 – Swikar