错误URL重定向

问题描述:

urls.py:错误URL重定向

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

所以每本书的URL是这样的:

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

我想,如果没有在一个错误网址,然后通过在网址末尾使用book.id将其重定向到真实网址。

例如,如果我去:

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

然后我会重定向到:

例子。 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引起。*

为什么? 我需要做什么?

传递给视图的所有参数都是字符串。在使用前通过int(),或者使用%s代替。

+0

我用%S,但我得到这个错误: 的网页没有正确重定向 的Firefox已经检测到服务器重定向此地址的请求的方式,将永远不会完成。 *此问题有时可能由禁用或拒绝接受Cookie引起。 – xRobot 2010-05-09 00:42:46

+1

@xRobot:你正在运行一个重定向循环,这意味着这个语句“if booktitle!= book.book_title”永远是真的......这将是因为你正在使用'%(书名,预订者, bookid,)'而不是'(book.title,book.editor,....)' – mpen 2010-05-09 00:48:57

+0

ops ..你没错......现在工作谢谢;) – xRobot 2010-05-09 00:54:49

呀,只需更换%i

redirect_to = "/book/%s/%s/%s/%s/%i/" % (booktitle, bookeditor, bookpages, bookid,) 

随着%s。不要打扰将它转换为整数。

+0

我已经使用%s但是出现这个错误:页面没有正确重定向Firefox已经检测到服务器以永远不会完成的方式重定向该地址的请求。 *有时可能由于禁用或拒绝接受cookie而导致此问题。 – xRobot 2010-05-09 00:49:23