Django Inverso con argumentos '()' y argumentos de palabras clave '{}' no encontrados


144

Hola, tengo un problema exasperante.

Tengo un patrón de URL como este:

# mproject/myapp.urls.py

url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),

funciona bien en el navegador pero para probar, cuando hago esto en el shell:

from django.test import Client
from django.core.urlresolvers import reverse

client= Client()
response = client.get(reverse('edit_project'), project_id=4)

Me da miedo:

NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.

¿Que me estoy perdiendo aqui?


en el último django , el reverso se importa de las URL. es decirfrom django.urls import reverse
suhailvs

Respuestas:



6

La solución @ miki725 es absolutamente correcta. Alternativamente, si desea utilizar el argsatributo en lugar de kwargs, entonces simplemente puede modificar su código de la siguiente manera:

project_id = 4
reverse('edit_project', args=(project_id,))

Un ejemplo de esto se puede encontrar en la documentación . Esto esencialmente hace lo mismo, pero los atributos se pasan como argumentos. Recuerde que cualquier argumento que se pase debe tener asignado un valor antes de ser revertido. Simplemente use el espacio de nombres correcto, que en este caso es 'edit_project'.


1
Me gusta su brevedad.
Bartleby

2

Este problema me causó un gran dolor de cabeza cuando intenté usar el reverso para generar el enlace de activación y, por supuesto, enviarlo por correo electrónico. Así que creo que de tests.py será lo mismo. La forma correcta de hacer esto es la siguiente:

from django.test import Client
from django.core.urlresolvers import reverse

#app name - name of the app where the url is defined
client= Client()
response = client.get(reverse('app_name:edit_project', project_id=4)) 

1
Acabo de intentar esto, no funciona. La respuesta de @ miki725 es correcta.
Daniel van Flymen

1
Creo que una llave está en el lugar incorrecto: respuesta = client.get (reverse ('edit_project', project_id = 4))
Wim Feijen

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.