Oi, eu tenho um problema irritante.
Eu tenho um padrão de URL como este:
# mproject/myapp.urls.py
url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),
funciona bem no navegador, mas para testes, quando faço isso no shell:
from django.test import Client
from django.core.urlresolvers import reverse
client= Client()
response = client.get(reverse('edit_project'), project_id=4)
Eu tenho o temido:
NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.
O que estou perdendo aqui?
django
django-testing
Darwin Tech
fonte
fonte
from django.urls import reverse
Respostas:
Você precisa especificar
project_id
:Doc aqui
fonte
A solução @ miki725 está absolutamente correta. Como alternativa, se você desejar usar o
args
atributo, em vez dekwargs
, basta modificar seu código da seguinte maneira:Um exemplo disso pode ser encontrado na documentação . Isso essencialmente faz a mesma coisa, mas os atributos são passados como argumentos. Lembre-se de que qualquer argumento passado precisa receber um valor antes de ser revertido. Basta usar o espaço para nome correto, que neste caso é
'edit_project'
.fonte
Esses problemas me causaram muita dor de cabeça quando tentei usar o reverse para gerar um link de ativação e enviá-lo por e-mail, é claro. Então, eu acho que a partir do tests.py será o mesmo. A maneira correta de fazer isso é a seguinte:
fonte
A resolução também é mais direta
Documentação sobre este atalho
fonte