veces una texto reservadas repite para palabras palabra nube las funcion frecuencia cuantas contar claves python django django-templates

python - una - Invertir para ''*'' con argumentos ''()'' y argumentos de palabras clave ''{}'' no encontrados



palabras claves de python (7)

Capturó una excepción mientras procesaba:

Inversa para ''products.views.''filter_by_led'' con argumentos ''()'' y argumentos de palabras clave ''{}'' no encontrados.

Pude importar con éxito products.views.filter_by_led desde el shell y funcionó para que la ruta sea correcta.

Aquí está el urls.py:

(r''^led-tv/$'', filter_by_led ),

Aquí es donde se genera el error:

href="{% url products.views.filter_by_led %}">

Lo cual no puedo entender porque esto funciona bien desde el mismo archivo:

{% url products.views.lcd_screen_size screen_size=50 %}

Aquí está la definición de la función:

def filter_by_led(request):

No entiendo por qué Django pensaría que la función no podría encontrar el Reverse para esa función.

Eliminé todos los *.pyc y reinicié Apache.

¿Qué estoy haciendo mal?


En caso de que ayude a alguien, tuve un problema similar y el error se debió a dos razones:

  1. No usar el espacio de nombres de la aplicación antes del nombre de la url

    {% url ''app_name:url_name'' %}

  2. Faltan comillas simples alrededor del nombre de la url (como lo señala Charlie)


Hay 3 cosas que puedo pensar en la parte superior de mi cabeza:

  1. Solo usé URLs con nombre , es más robusto y fácil de mantener
  2. Intenta usar django.core.urlresolvers.reverse en la línea de comando para un (posiblemente) mejor error

    >>> from django.core.urlresolvers import reverse >>> reverse(''products.views.filter_by_led'')

  3. Comprueba si tienes más de una url que apunta a esa vista


Las llamadas de shell para invertir (como se mencionó anteriormente) son muy buenas para solucionar estos problemas, pero existen dos condiciones críticas:

  • debe proporcionar argumentos que coincidan con los argumentos que necesite la vista,
  • estos argumentos deben coincidir con los patrones de expresiones regulares.

Sí, es lógico Sí, también es confuso porque reverse arrojará la excepción y no le dará más pistas.

Un ejemplo de patrón de URL:

url(r''^cookies/(?P<hostname>[^/]+)/(?P<url_id>/d+)/$'', ''register_site.views.show_cookies'', name=''show_cookies''),

Y luego, ¿qué ocurre en el caparazón?

>>> from register_site.views import show_cookies >>> reverse(show_cookies) NoReverseMatch: Reverse for ''register_site.views.show_cookies'' with arguments ''()'' and keyword arguments ''{}'' not found.

No funciona porque no proporcioné argumentos.

>>> reverse(''show_cookies'', kwargs={''url_id'':123,''hostname'': ''aaa''}) ''/cookies/aaa/123''

Ahora funcionó, pero ...

>>> reverse(''show_cookies'', kwargs={''url_id'':''x'',''hostname'': ''www.dupa.com''}) NoReverseMatch: Reverse for ''show_cookies'' with arguments ''()'' and keyword arguments ''{''url_id'': ''x'', ''hostname'': ''www.dupa.com''}'' not found.

Ahora no funcionó porque url_id no coincidía con la expresión regular (cadena numérica esperada y suministrada).

Puede usar el reverso con argumentos posicionales y argumentos de palabra clave. La sintaxis es:

reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None)

En lo que respecta a la etiqueta de plantilla de la url , hay algo gracioso al respecto. La documentation Django da un ejemplo del uso del nombre de vista entrecomillado:

{% url ''news.views.year_archive'' yearvar%}

Así que lo usé de manera similar en mi plantilla HTML:

{% url ''show_cookies'' nombre de host = u.hostname url_id = u.pk%}

Pero esto no funcionó para mí. Pero el mensaje de excepción me dio una pista de lo que podría estar mal: tenga en cuenta las comillas simples dobles alrededor del nombre de la vista:

Invierta para '''' show_cookies '''' con argumentos ...

Empezó a funcionar cuando eliminé las comillas:

{% url show_cookies hostname = u.hostname url_id = u.pk%}

Y esto es confuso


Necesita comillas simples alrededor del nombre de la vista

{% url ''viewname'' %}

en lugar de

{% url viewname %}


No creo que necesite la barra final en la entrada de la URL. Es decir, pon esto en su lugar:

(r''^led-tv$'', filter_by_led ),

Esto supone que tiene barras diagonales habilitadas, que es la predeterminada.


Tuve un problema similar y la solución estaba en el uso correcto del carácter ''$'' (final de la cadena):

Mi url.py principal se veía así (observe el caracter $):

urlpatterns = [ url(r''^admin/'', include(admin.site.urls )), url(r''^$'', include(''card_purchase.urls'' )), ]

y mi url.py para mi aplicación card_purchases dijo:

urlpatterns = [ url(r''^$'', views.index, name=''index''), url(r''^purchase/$'', views.purchase_detail, name=''purchase'') ]

Usé el ''$'' dos veces. Entonces un simple cambio funcionó:

urlpatterns = [ url(r''^admin/'', include(admin.site.urls )), url(r''^cp/'', include(''card_purchase.urls'' )), ]

¡Observe el cambio en la segunda url! Mi url.py para mi aplicación card_purchases tiene este aspecto:

urlpatterns = [ url(r''^$'', views.index, name=''index''), url(r''^purchase/$'', views.purchase_detail, name=''purchase'') ]

¡Además de esto, puedo confirmar que las citas alrededor de las URL nombradas son cruciales!


{% url ''polls:create'' poll.id %}