2016-11-02 6 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

エラーは、URLにないalbums = get_object_or_404(Album、title = album)です。 – Zartch

+0

@Zartchどうすれば修正できますか? – HackAfro

答えて

0

あなたのURLはあまりにも一般的です。 .+は、とすべて一致します。など、album_details URLで捕捉しようとしていた「Wizked/Starboy」などが含まれます。

あなたは、これらのURLパターンの順序を切り替えることで、この問題を解決することができますが、また、彼らは少ないジェネリックにする必要があります - 例えばr'^(?P<artiste>\w+)など

+0

これもうまくいった – HackAfro

0

コードはOKらしいです。論理的な問題です。

エラーは次のとおりです。このクエリを処理しているアーティストはいません。 URLで

、一致したURLは次のとおりです。

URL(R '?。^(P <芸人> +)/ $'、views.details、名前= '詳細')、

なぜですか? "+" は:

albums = get_object_or_404(Album, title=album) 

アルバムがあると、 "ウィズキッド/ Starboy" に等しい

クエリが提起 becouseは "ウィズキッド/ Starboy"

あなたは、このコードに到着含め、すべてのものと一致しました404項目が見つかりませんでした。

URLで変更した場合は "\ワット+" ダニエルが言ったように試合のようになりますと "+":?。

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) 

その名前のアルバムとアーティストを含むレコードがデータベースにある場合、そのページが表示されます。

あなたが行うことができますHTMLで
albums = Album.objects.filter(title=album) 

{% 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 %} 

することができます。この方法で は、あなたはまだ私はあなたに、少なくともアルバムのクエリを変更することをお勧め404

を持っていないですアルバムのないアーティストがいるページがあります

+0

すべての英雄が岬を着るわけではありません。あなたは英雄です。ありがとう。私はロングタイムのためにこれにいました。ブレス – HackAfro

+0

私は英雄の言葉の代わりに正解を好むでしょう。しかし、thx男。どういたしまして。 コードを保存してください。 – Zartch

関連する問題