Django: função inversa falhar com uma excepção
Pergunta
Eu estou seguindo o tutorial Django e ficou preso com um erro na parte 4 do tutorial. I chegou à parte onde eu estou escrevendo o voto vista, que usa reverter para redirecionar para outra vista. Por alguma razão, não inversa com a seguinte exceção:
import () Argumento 1 deve ser uma string, não instancemethod
Atualmente olhares urls.py do meu projeto como este:
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^polls/', include('mysite.polls.urls')),
(r'^admin/(.*)', include(admin.site.root)),
)
eo urls.py aplicativo é:
from django.conf.urls.defaults import *
urlpatterns = patterns('mysite.polls.views',
(r'^$', 'index'),
(r'^(?P<poll_id>\d+)/$', 'details'),
(r'^(?P<poll_id>\d+)/results/$', 'results'),
(r'^(?P<poll_id>\d+)/vote/$', 'vote'),
)
E a vista voto é: (eu simplificado para ter apenas a linha com o erro)
def vote(request, poll_id):
return HttpResponseRedirect(reverse('mysite.polls.views.results', args=(1,)))
Quando eu remover o administrador urls incluem desde urls.py do projeto, ou seja, tornando-se em:
urlpatterns = patterns('',
(r'^polls/', include('mysite.polls.urls')),
#(r'^admin/(.*)', include(admin.site.root)),
)
ele funciona.
Eu tentei tantas coisas e não pode entender o que estou fazendo de errado.
Solução
A maneira como você incluir as URLs de administração mudou algumas vezes ao longo do último par de versões. É provável que você está usando as instruções erradas para a versão do Django instalado.
Se você estiver usando o tronco atual - ou seja, não um lançamento oficial -, então a documentação em http: //docs.djangoproject.com/en/dev/ está correto.
No entanto, se você estiver usando 1.0.2, então você deve seguir o link no topo da página para http://docs.djangoproject.com/en/1.0/ .