我正在尝试在django 1.4中构建(有点RESTFul)URL,允许按书章过滤,然后还可以预订章节。但是,截至目前,只有特定章节和部分的网址返回信息。当我只输入章节时,页面显示没有任何内容。
我的urlpatterns在settings.py中:
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工作正常,但不是“book / 1”,这应该在技术上显示第1章的所有内容。我没有收到错误,但是同时,屏幕上没有显示任何内容。
答案 0 :(得分:2)
您已将尾部斜杠设为可选,但您的正则表达式仍然需要至少一个字符用于section参数。
尝试更改
(?P<section>[\w\.-]+)
到
(?P<section>[\w\.-]*)
就个人而言,我发现声明两个URL模式而不是带有可选参数的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):