0

私はdjango 1.4で(ややRESTFul)URLを構築しようとしています。これにより、本の章、そして本の章とセクションによるフィルタリングが可能になります。ただし、現時点では、特定の章セクションの URL の情報のみが返されます。チャプターを入力すると、ページにコンテンツが表示されません。

settings.py の私の urlpatterns:

url(r'^(?i)book/(?P<chapter>[\w\.-]+)/?(?P<section>[\w\.-]+)/?$', 'book.views.chaptersection'),

私のviews.py:

from book.models import contents as C
def chaptersection(request, chapter, section):

if chapter and section:

    chapter = chapter.replace('-', ' ')
    section = section.replace('-', ' ')

    info = C.objects.filter(chapter__iexact=chapter, section__iexact=section).order_by('symb')
    context = {'info':info}
    return render_to_response('chaptersection.html', context, context_instance=RequestContext(request))

elif chapter:

    chapter = chapter.replace('-', ' ')

    info = C.objects.filter(chapter__iexact=chapter).order_by('symb')
    context = {'info':info}
    return render_to_response('chaptersection.html', context, context_instance=RequestContext(request))

else:
    info = C.objects.all().order_by('symb')
    context = {'info':info}
    return render_to_response('chaptersection.html', context, context_instance=RequestContext(request))

繰り返しますが...第1章セクション1の「book/1/1」のURLは正常に機能しますが、技術的に第1章のすべてを表示する必要がある「book/1」では機能しません。エラーは発生していませんが、同時に画面には何も表示されていません。

4

1 に答える 1

2

末尾のスラッシュをオプションにしましたが、正規表現にはセクション引数に少なくとも 1 文字が必要です。

変更してみる

(?P<section>[\w\.-]+)

(?P<section>[\w\.-]*)

個人的には、オプションのパラメーターを使用して 1 つの URL パターンを宣言するよりも、2 つの URL パターンを宣言する方が明確だと思います。

url(r'^(?i)book/(?P<chapter>[\w\.-]+)/$', 'book.views.chaptersection'),
url(r'^(?i)book/(?P<chapter>[\w\.-]+)/(?P<section>[\w\.-]+)/$', 'book.views.chaptersection'),

これには、オプションの引数chaptersectionを作成するためにビューを少し調整する必要があります。section

def chaptersection(request, chapter, section=None):
于 2012-09-13T22:55:26.757 に答える