0

Djangoアプリのurls.pyファイルの構造化に問題があります。

私のプロジェクトは基本的な音楽プレーヤーアプリです。まず、[音楽]のリンクをクリックし、次に(たとえば)アーティストをクリックしてから、 Weezerなどのアーティストを選択します。次に、アプリは、 views.artist_name関数によってartist_name.htmlテンプレートにレンダリングされた、そのアーティストによるアルバムと曲のリストを表示します。

これまでのところ、アプリのナビゲーションでは、URLはhttp:// localhost / music / articles /Weezer/のようになります。

私の問題は次のURLのエンコーディングにあります。WeezerのアルバムTheBlueAlbumを選択した場合は、次のURLを返します:http:// localhost / music / articles / Weezer / The%20Blue%20Album

これにより、 views.artist_album_title関数を使用してartist_album_title.htmlというテンプレートがレンダリングされます。代わりに、現在のページと同じviews.artist_name関数を使用して新しいページをレンダリングします。

起こっているように見えるのは、... Weezer / The%20Blue%20Album/の正規表現パターンが私のurls.pyファイルの関連するURLパターンと一致していないことです。Djangoを初めて使用する(そして正規表現の経験が最小限である)ため、この種のアプリでurls.pyファイルがどのように表示されるかを判断するのに苦労しています。

以下は、現在のurls.pyファイルです。私の問題についてのどんな助けも歓迎されるでしょう。みんなありがとう。

from django.conf.urls import patterns, include
from music.views import home, music, artists, artist_name,  artist_album_title

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    (r'^$', home),
    (r'^music/$', music),
    (r'^music/artists/$', artists),
    (r'^music/artists/([\w\W]+)/$', artist_name),
    (r'^music/artists/([\w\W]+)/([\w\W]+)/$', artist_album_title),
)

views.pyのartist_album_title関数

def artist_album_title(request, album_title):
    album_tracks = Track.objects.filter(album__title=album_title)
    return render_to_response('artist_album_title.html', locals(), context_instance=RequestContext(request))
4

1 に答える 1

0

urlpatternsの問題は、url / music / Artists / Weezer / The%20Blue%20Albumが最初のパターンを満たしているため、次のパターンに移動しないことです。これは、Djangoが指定された順序でパターンを実行するためです。

これが機能するためには、次のように2つのパターンの場所を切り替える必要があります。

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    (r'^$', home),
    (r'^music/$', music),
    (r'^music/artists/$', artists),
    (r'^music/artists/([\w\W]+)/([\w\W]+)/$', artist_album_title),
    (r'^music/artists/([\w\W]+)/$', artist_name),

)

URLに次の構造を使用するのが最善です。

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    (r'^$', home),
    (r'^music/$', music),
    (r'^music/artists/$', artists),
    (r'^music/artists/(?P<artist_name>[\w\W]+)/(?P<album_title>[\w\W]+)/$', artist_album_title),
    (r'^music/artists/(?P<artist_name>[\w\W]+)/$', artist_name),

)

ビューの定義は次のようになります。

def artist_album_title(request, artist_name,album_title):

def artist_name(request, artist_name):

DjangoドキュメントのURLにある名前付きグループの詳細については、 https: //docs.djangoproject.com/en/dev/topics/http/urls/#named-groupsを参照してください。

于 2013-02-18T14:38:20.057 に答える