0

我正在尝试在 django 1.4 中构建(有点 RESTFul)URL,它允许按书籍章节过滤,然后还可以按书籍章节和章节进行过滤。但是,截至目前,只有特定章节章节 URL 的返回信息。当我只是输入一个章节时,页面显示没有任何内容。

我在 settings.py 中的 urlpatterns:

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

我的意见.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 章的所有内容。我没有收到错误,但同时时间,屏幕上什么也没有显示。

4

1 回答 1

2

您已将尾部斜杠设为可选,但您的正则表达式仍需要至少一个字符作为 section 参数。

尝试改变

(?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):
于 2012-09-13T22:55:26.757 回答