2010-05-09 2 views
2

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

.

Так URLs каждой книги, как это:

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

Я хочу, что если есть ошибка в url, то я перенаправляюсь к реальному URL-адресу, используя book.id в конце URL-адреса.

Например, если я иду:

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

тогда я попадаю на:

пример. com/book/the-bible/gesu-crist/938/12/

.

, но если я иду в неправильном URL я получаю эту ошибку:

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

%d format: a number is required, not unicode 

.

Если я использую% s, то я получаю эту ошибку:

* Страница не перенаправлять правильно Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что никогда не будет завершена. * Эта проблема иногда может быть вызвана отключением или отказом в принятии файлов cookie. *

Почему? Что мне нужно делать?

ответ

3

Все аргументы, переданные в представление, являются строками. Перед тем, как использовать его, перетащите его до int() или просто используйте вместо него %s.

+0

я использовал% S, но я получаю эту ошибку: страница не перенаправлять правильно Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что никогда не будет завершена. * Эта проблема иногда может быть вызвана отключением или отказом принимать файлы cookie. – xRobot

+1

@xRobot: вы работаете в цикле переадресации, что означает, что этот оператор 'if booktitle! = Book.book_title' всегда прав ... это было бы потому, что вы используете'% (booktitle, bookitor, bookpages, bookid,) 'вместо' (book.title, book.editor, ....) ' – mpen

+0

ops .. вы правы ... теперь работаю спасибо;) – xRobot

0

Да, просто заменить %i в

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

на С %s. Не утруждайте себя отлитием целого числа.

+0

Я использовал% s, но я получаю эту ошибку: Страница не перенаправляется должным образом, Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен. * Иногда эта проблема может быть вызвана отключением или отказом принимать файлы cookie. – xRobot

Смежные вопросы