2011-08-24 18 views
10

He estado trabajando en un proyecto django desde hace un tiempo que ahora usa grappelli para el administrador y de repente hoy mi plantilla change_form.html arroja el siguiente error:administrador Django-grappelli: Ningún error de coincidencia inversa

Caught NoReverseMatch while rendering: Reverse for "grp_related_lookup" with arguments '()' and keyword arguments '{}' not found. 

La línea de código que es la línea 38:

37 $.each(related_lookup_fields_fk, function() { 
38  $("#id_" + this).grp_related_fk({lookup_url:"{% url grp_related_lookup %}"}); 
39 }); 

que es precedido por este bit de código:

var related_lookup_fields_fk = {% get_related_lookup_fields_fk adminform.model_admin %}; 

Obviamente es el bit {% url grp_related_lookup %} el que está causando el problema.

No entiendo cómo se resuelve la plantilla grp_related_lookup a grappelli.views.related.related_lookup. He intentado reemplazar grp_related_lookup con grappelli.views.related.related_lookup y eso tampoco funcionó. Además, en la plantilla de la línea en cuestión es el siguiente:

$("#id_" + this).grp_related_fk({lookup_url:"{% url grp_related_lookup %}"}); 

pero en el mensaje de error que se parece a esto:

$("#id_" + this).grp_related_fk({lookup_url:"{% url 'grp_related_lookup' %}"}); 

No sé si las comillas simples que rodean grp_related_lookup podrían tener algo para hacer con el problema o no ¿Es así como django prestó la llamada a la función? ¿Está pasando la cadena 'grp_related_lookup' a la etiqueta de la plantilla de URL? Si es así, ¿qué pudo haber causado que esto rompiera de repente?

Alguna información adicional:

  • El valor de related_lookup_fields es una lista vacía []. No estoy definiendo ningún related_lookup_fields en mi admin.py.
  • Lancé un par de instrucciones de depuración en la función de vista grappelli.views.related.related_lookup y no parece que se llame.
  • No he tocado ninguna de las plantillas recientemente.

Espero que alguien pueda señalarme en la dirección correcta ... ¡Gracias!

Respuesta

19

¿Todavía tiene 'grappelli.urls' incluido en su URLconf? Esa es la única razón por la que veo que causaría este error. Puedes probar a utilizar python manage.py shell:

from django.core.urlresolvers import reverse 
print reverse('grp_related_lookup') 

Si esta línea devuelve la URL correcta, no debe obtener un NoReverseMatch en su plantilla.

Las cotizaciones alrededor de grp_related_lookup no deberían ser una preocupación. La etiqueta {% url %} acepta las cadenas entre comillas y sin comillas como primer argumento, por lo que django lo normaliza a las cadenas entre comillas. Este comportamiento va a cambiar en el futuro: podrá pasar variables de plantilla a {% url %} utilizando cadenas sin comillas. {% url foo %} y {% url "foo" %} no darán el mismo resultado; consulte el 1.3 release notes para obtener detalles sobre esto.

+0

Sí, tengo '(r '^ grappelli /', include ('grappelli.urls'))' en mi URLconf. Probé tu sugerencia en el intérprete de órdenes y también está arrojando un error. Gracias por la información sobre la etiqueta de la plantilla de URL. – heavilyinvolved

+0

Interesante ... ¿Intenta imprimir todos sus patrones de URL y ver cómo se ve? Usando algo como http://stackoverflow.com/questions/1828187/determine-complete-django-url-configuration – brutasse

+0

¡Gracias! Comprobar dos veces mis patrones de URL fue una buena decisión. Los patrones de url grappelli son, de hecho, desaparecidos. Ahora necesito descubrir cómo y por qué ... – heavilyinvolved

6

Encontré el mismo comportamiento con Django 1.5 y Grappelli 2.4.4.

para solucionar el problema que tenía que añadir

url(r'^grappelli/', include('grappelli.urls')), 

a urlpatterns.

1

Me enfrenté con este problema hoy, cuando traté de eliminar datos en el administrador. Reverse for 'app_list' with arguments '()' and keyword arguments '{'app_label': ''}' not found.

He puesto el url(r'^grappelli/', include('grappelli.urls')) en urls.py

La solución es bastante extraño: simplemente actualizar el Grappelli a la última versión. (Lo actualicé de 2.5.6 a 2.6.3)

+0

¡Gracias por documentar esto! Solo tuve el mismo problema después de actualizar a Django 1.7. Mi equipo de marketing está derribando mi puerta preguntando por qué la herramienta de administración está rota. – Civilian

1

Ayer me enfrenté a este problema. El Django-grapelli que utilicé fue el que se incluyó en la instalación de FileBrowser. Resolví el problema actualizando Django-grapelli. Sólo tienes que escribir:

pip install --upgrade django-grappelli 
0

Me parece que ocurra este mismo problema, pero cuando funciono con la prueba de la consola sugerido me sale esto:

Python 2.7.9 (default, Apr 7 2015, 07:58:25) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> from django.core.urlresolvers import reverse 
>>> print reverse('grp_related_lookup') 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/Users/tsantor/.virtualenvs/project_env/lib/python2.7/site-packages/django/core/urlresolvers.py", line 579, in reverse 
    return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 
    File "/Users/tsantor/.virtualenvs/project_env/lib/python2.7/site-packages/django/core/urlresolvers.py", line 496, in _reverse_with_prefix 
    (lookup_view_s, args, kwargs, len(patterns), patterns)) 
NoReverseMatch: Reverse for 'grp_related_lookup' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

Y mi urls.py se ve así:

urlpatterns = patterns(

    # Admin 
    url(r'^grappelli/', include('grappelli.urls')), 
    url(r'^admin/', include(admin.site.urls), name="admin"), 

    # main views 
    #url(r'^$', RedirectView.as_view(url='/admin'), name='home'), 

    # API 
    url(r'^api/', include('api.urls', namespace='api')), 
) 

También tengo el último Grappelli (2.6.4) ejecutándose en Django (1.8.2). Por cierto, parece que solo ocurre cuando intento acceder y agregar o editar la vista. El panel de control y las vistas de lista funcionan.

Cuestiones relacionadas