2016-11-02 59 views
0

因此,我正在開發一個項目,顯示由數據庫中特定藝術家發佈的歌曲和歌曲以及專輯。我有點卡住了。我嘗試創建一個頁面,當您點擊相冊鏈接時,該頁面會顯示相冊中的歌曲。當點擊鏈接時,我希望URL顯示藝人的姓名和專輯的標題,但我一直得到相同的錯誤。它將專輯名稱與藝人名稱相匹配。Django中的URL conf問題

我如何使網頁顯示歌曲專輯。

Money

以下是意見代碼

def home(request): 
    artistes = Artiste.objects.all() 
    return render(request, 'music/home.html', locals()) 


def details(request, artiste): 
    artistes = get_object_or_404(Artiste, name=artiste) 
    album = Artiste.objects.get(name=artiste).album_set.all() 
    single = Artiste.objects.get(name=artiste).song_set.filter(single=True) 
    return render(request, 'music/details.html', {'artistes': artistes, 'single': single, 'album':album}) 


def album_details(request,name,album): 
    albums = get_object_or_404(Album, title=album) 
    artistes = get_object_or_404(Artiste, name=name) 
    single = Album.objects.get(title=album).song_set.filter(single=False) 
    return render(request, 'music/album_detail.html', {'albums': albums, 'single': single}) 

URL模式

app_name = 'music' 

urlpatterns = [ 
    url(r'^$', views.home, name='home'), 
    url(r'^(?P<artiste>.+)/$', views.details, name='details'), 
    url(r'^(?P<name>.+)/(?P<album>.+)/$', views.album_details, name='album_details') 
] 

專輯詳情頁

<body> 
    {% if artistes.album_set.all %} 
     {% for songs in album %} 
      <h4>Albums</h4> 
      <!--<img src="{{album.art}}"><br> 
      --> 
      <a href="{% url 'music:album_details' songs.artiste songs.title %}">{{songs.title}}</a> 
      <h5>{{songs.artiste}}</h5> 
      <h5>{{songs.title}}</h5> 
     {% endfor %} 
    {% else %} 
     <h3>No albums available</h3> 
     <h5>Check Out Songs </h5> 
     <ul> 
     {% for song in artistes.song_set.all %} 
      <li>{{song}} - mp3</li> 
     {% endfor %} 
     </ul> 
    {% endif %} 


</body> 
</html> 
+0

錯誤記錄:albums = get_object_or_404(專輯,標題=專輯)不在URL中。 – Zartch

+0

@ Zartch我如何糾正它? – HackAfro

回答

0

您的網址是太普通。 .+匹配所有內容,包括您想要通過album_details URL捕獲的「Wizked/Starboy」等內容。

您可以通過切換這些URL模式的順序解決這個問題,但是你也應該讓他們少通用的 - 例如r'^(?P<artiste>\w+)

+0

這也有效 – HackAfro

0

代碼似乎確定。是一個邏輯問題。

的錯誤是:沒有藝人MACHING此查詢。

在URLS

,匹配URL爲:

URL(R '?。^(P <藝人> +)/ $',views.details,名稱= '細節'),

爲什麼? 「+」 becouse匹配的一切,包括 「威基德/ Starboy」

當你到達這個代碼:

albums = get_object_or_404(Album, title=album) 

專輯是等於 「威基德/ Starboy」

查詢提出了一個404因爲沒有找到物品。如果您在URL改變

的以 「\ w +」 作爲丹尼爾說這場比賽將是 「+」:?

URL(R'^(P <名> +)/( ?P < album>。+)/ $',views。album_details,名稱= 'album_details')

然後PARAMS是:

名=威基德

專輯= Starboy

然後你執行該代碼:

albums = get_object_or_404(Album, title=album) 
artistes = get_object_or_404(Artiste, name=name) 

如果數據庫中的記錄包含具有該名稱的專輯和藝術家,則顯示該頁面。 你是不是仍然有404

我建議你改變至少相冊查詢到:

albums = Album.objects.filter(title=album) 

在HTML中,你可以這樣做:

{% for songs in album %} 
      <h4>Albums</h4> 
      <!--<img src="{{album.art}}"><br> 
      --> 
      <a href="{% url 'music:album_details' songs.artiste songs.title %}">{{songs.title}}</a> 
      <h5>{{songs.artiste}}</h5> 
      <h5>{{songs.title}}</h5> 
     {% empty %} 
      No album was found 
     {% endfor %} 

這種方式可以有一個沒有相冊的藝術家的頁面

+0

並非所有英雄都穿披風。你是英雄布魯。謝謝。我一直在這個很長的時間。祝福 – HackAfro

+0

我寧願用正確的答案代替英雄的話。但是這個男人。不用謝。 繼續編碼。 – Zartch