2017-03-06 17 views
0

我無法在主頁上顯示所有用戶的歌曲。我想直接在主頁上顯示它們,例如Youtube或其他音頻流媒體網站,而無需登錄。我試過objects.all()沒有任何反應。在沒有登錄html頁面的情況下顯示django中所有用戶的對象

請告訴我要寫什麼views.py以及html模板homepage.html。我正在使用Python 3django 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'), 
] 

回答

0

首先,你應該把默認的網址最後

url(r'^$', views.index, name='index'), 

這個網址應該是最後的網址在urls.py

那麼在你的觀點你有index()函數

def index(request): 
if request.user.is_authenticated(): # Edit HERE if authenticated        
    song_results = Song.objects.all() 
    albums = Album.objects.all()  
    return render(request, 'music/index.html', { 
      'albums': albums, 
      'songs': song_results, 
     }) 
else: 
    albums = Album.objects.all() 
    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/homepage.html', { 
      'albums': albums, 
      'songs': song_results, 
     }) 
    else: 
     return render(request, 'music/homepage.html', {'albums': albums}) 

如果用戶沒有再認證,如果認證index.html你可能做的想你想

homepage.html條件相對要傳遞albumssongs你應該通過整體的homepage.html否則這樣

<html> 
<body> 

{% if albums %} 
    {% for album in albums %} 
    {{ album.album_title }} 
    {% endfor %} 
{% endif %} 

{% if songs %} 
    {% for song in songs %} 
    {{ song.song_title }} 
    {% endfor %} 
{% endif %} 

</body> 
</html> 
+0

我想要的方式是將index.html作爲登錄後的第一頁,並將homepage.html作爲登錄前的第一頁。 – Swikar

+0

然後只是在views.index中交換名稱 – Bijoy

+0

它沒有工作。 – Swikar

0

修改你的第一個(根)URL模式與

url(r'^$', views.HomePage.as_view(), name='home'), 
+0

爲什麼?這不是基於班級的。 –

+0

在views.py文件中有一個名爲HomePage的類,它在檢索到所有歌曲對象後重定向到homepage.html。絕對所有其他路線都是FB。 –

+0

噢。你說得對。錯過了。 –

相關問題