2012-09-13 38 views
0

我想在django 1.4中構建(有點RESTFul)URL,它將允許按書籍過濾,然後還書本章節。不過,截至目前,只有特定章節節的URL返回信息。當我剛剛輸入一個章節時,頁面顯示時沒有任何內容。django - 網址格式和if-else視圖

我在settings.py URL模式:

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)) 

再次...在URL 「預定/ 1/1」 第1章第1名的作品好,但不是「book/1」,這應該在技術上顯示第1章的全部內容。我沒有收到錯誤,但同時屏幕上沒有顯示任何內容。

回答

2

你已經使尾隨斜槓可選,但你的正則表達式仍然需要至少一個字符的部分參數。

嘗試改變

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

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

就個人而言,我覺得它更清晰的聲明兩個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): 
+0

謝謝!非常簡潔,但內容豐富。 – snakesNbronies