错误URL重定向

时间:2010-05-09 00:37:13

标签: django django-urls

urls.py:

url(r'^book/(?P<booktitle>[\w\._-]+)/(?P<bookeditor>[\w\._-]+)/(?P<bookpages>[\w\._-]+)/(?P<bookid>[\d\._-]+)/$', 'book.views.book', name="book"), 

views.py:

def book(request, booktitle, bookeditor, bookpages, bookid, template_name="book.html"):

    book = get_object_or_404(book, pk=bookid)


    if booktitle != book.book_title :
        redirect_to = "/book/%s/%s/%s/%s/%i/" % ( booktitle, bookeditor, bookpages, bookid, )
        return HttpResponseRedirect(redirect_to)

    return render_to_response(template_name, { 'book': book, },)

所以每本书的网址都是这样的:

example.com/book/the-bible/gesu-crist/938/12 /

我希望如果网址中存在错误,那么我会通过在网址末尾使用book.id重定向到真实网址。

例如,如果我去:

example.com/book/A-bible/gesu-crist/938/12 /

然后我将被重定向到:

example.com/book/the-bible/gesu-crist/938/12 /

但如果我输入错误的网址,我会收到此错误:

TypeError at /book/A-bible/gesu-crist/938/12/

%d format: a number is required, not unicode

如果我使用%s,那么我会收到此错误:

*页面未正确重定向Firefox检测到服务器以永远不会完成的方式重定向此地址的请求。 *此问题有时可能是由于禁用或拒绝接受cookie造成的。*

为什么? 我该怎么办?

2 个答案:

答案 0 :(得分:3)

传递给视图的所有参数都是字符串。在使用之前将其推过int(),或者只使用%s

答案 1 :(得分:0)

是的,只需替换

中的%i即可
redirect_to = "/book/%s/%s/%s/%s/%i/" % ( booktitle, bookeditor, bookpages, bookid, )

%s。不要费心把它变成一个整数。