Django-grappelli: El menú desplegable del filtro no funciona debido a un error de Javascript en Chrome, FF

Creado en 1 ago. 2011  ·  31Comentarios  ·  Fuente: sehmaschine/django-grappelli

Acabo de instalar django-grappelli 2.3.4 en combinación con Django 1.4.0 alpha. Todo está bien, excepto por el cuadro desplegable de filtro en la página de la lista de cambios. Chrome y Firefox informan de un error de Javascript:

Uncaught TypeError: Object #<Object> has no method 'actions'
(anonymous function):8000/admin/msdb/incident/:59
c.extend.readyjquery-1.4.2.min.js:26
L

El fragmento de código relevante está en templates/admin/change_list.html. Una solución parece estar moviendo el bloque.

{% if action_form %}
  ...
{% endif %}

desde la línea 19 hasta la línea 65, justo después {{ media.js }} . Creo que esto se debe a que el script actions.js está cargado en el bloque contenido por media.js , que viene _después_ del código Javascript relevante.

No estoy seguro de si esto es el resultado de que el código Django aún está en alfa, pero pensé que lo informaría.

Otro error ocurre al mismo tiempo por grp_collapsible en templates/admin/includes_grappelli/header.html :

Uncaught TypeError: Object #<Object> has no method 'grp_collapsible'

Sin embargo, no sé cómo arreglar esto.

Comentario más útil

Para mí, el problema sigue presente.
python 2.7, django 1.9.6, grappelli 2.8.1

Todos 31 comentarios

probaste con django 1.3?

No lo siento. Solo 1.4.0a. Estoy un poco mareado, pero creo que es principalmente
una cosa grappelli: la plantilla change_list y el orden de
cargando/ejecutando código Javascript.

Puede que haya sido un poco apresurado al presentar el informe, y no riguroso
suficiente en las pruebas con diferentes versiones de django, ¡disculpas!

sinceramente... no creo que sea un error grappelli. de lo contrario, cientos de usuarios no podrán usar el filtro desplegable y no creo que ese sea el caso. Estoy bastante seguro de que es por la 1.4.0a... y grappelli siempre se desarrolla contra la última versión oficial.

Puedo confirmar que es así: el filtro desplegable no ha estado funcionando con django-trunk durante bastante tiempo. Todavía no he tocado las plantillas de Grappelli para mover el código como sugirió Swashbuckler.

Si Grappelli se mantiene actualizado con django-trunk, entonces es un problema que debe analizarse más de cerca. Sospecho que tiene que ver con Django 1.4 moviendo contrib.admin media a STATIC_URL y desaprobando ADMIN_MEDIA_PREFIX.

si lees mi último comentario verás que grappelli no está desarrollado con djangos trunk.

Lo siento, lo leí demasiado rápido :)

Cierro este ticket ya que está relacionado con la versión troncal de Django. Los documentos se han actualizado y se ha agregado una nota de que Grappelli siempre se desarrolla con la última versión estable de Django.

Parece que este problema persiste con el lanzamiento de 1.4 hace unos días. ¿Alguna posibilidad de que esto se pueda arreglar?

por supuesto, se arreglará una vez que grappelli sea compatible con django 1.4

¿Hay alguna solución para aquellos que usan django1.4?

para aquellos que usan django1.4, usen la rama grappelli_2_4.

cd ../lib/python2.7/site-packages
git init django-grappelli
cd django-grappelli
git remote add --track grappelli_2_4 grappelli_2_4 https://github.com/sehmaschine/django-grappelli.git
git fetch grappelli_2_4
git checkout grappelli_2_4
python setup.py install

la última vez que revisé la sucursal hubo grandes problemas con el marcado, lo que hizo que la mayor parte fuera inutilizable en los negocios :(

atrápalo con django 1.4.2 y grappelli 2.4.3

Usar Grappelli 2.4.3 + Django 1.4.3 con Firefox 17 y tener este mensaje de error en la página que tiene filtros:

TypeError: $(...).actions is not a function
$("tr input.action-select").actions();

la barra de paginación se rompió: se movió a la parte superior de la lista y los filtros no se abrieron (ver imagen adjunta).

Borrar caché no ayuda.

Capture d e cran 2013-01-04 a 11 50 42

Parece que el jquery utilizado no es apropiado en mi caso (se importan varias versiones, los scripts usan "grp.jQuery" en lugar del valor predeterminado).
Se solucionó anulando las plantillas y reemplazando "grp.jQuery" con "django.jQuery" en el siguiente código:

<script type="text/javascript" charset="utf-8">
        (function($) {
            $(document).ready(function() {
                $("tr input.action-select").actions();
            });
        })(grp.jQuery);
    </script>

Eso da como resultado el siguiente código:

<script type="text/javascript" charset="utf-8">
        (function($) {
            $(document).ready(function() {
                $("tr input.action-select").actions();
            });
        })(django.jQuery);
    </script>

grp.jQuery debe estar allí, de lo contrario, js no funcionará ... ya tuvimos ese problema con otro ticket y resultó que era un problema de configuración. ¿Está seguro de que sus archivos javascript se están cargando correctamente?

@sehmaschine Actualicé mi comentario (usando el espacio de nombres "django.jQuery" en lugar de ninguno).
grp.jQuery es en realidad 1.7.2 mientras que django.jQuery es 1.4.2. No personalicé mucho la configuración en admin y grappelli. Es posible que me haya perdido alguna configuración de alguna manera, pero no puedo averiguar qué o dónde.

Para obtener información, aquí está mi archivo fuente que falla. Y donde se resuelve cambiar "grp.jQuery" a "django.jQuery": https://gist.github.com/4452470

Incluso la casilla de verificación de marcar todo ( ) funciona ahora.

¿Puedes comprobar por qué grp.jQuery no está allí? porque debe ser como se mencionó anteriormente, si grp.jQuery no está allí, muchas cosas no funcionarán como se esperaba.

Tengo este mismo problema (Django 1.5, Chrome 26). Si interrumpo la línea en cuestión ( $("tr input.action-select").actions(); ), grp.jQuery está ahí, simplemente no tiene el método actions() .

ack mismo problema que defrex

Estoy viendo lo mismo que tú, @defrex , pero solo cuando se carga actions.min.js. Si DEBUG=True todo parece estar bien. ¿Tu @vongesell también lo ha notado? ¿Alguno de ustedes logró arreglarlo?

Ah, sí, la misma versión de Django y Chrome, y estoy usando grappelli 2.4.4.

Mismo problema, Django==1.5, django-grappelli==2.4.4, Firefox 22.0 en Ubuntu. Salida de la consola Firebug:

TypeError: $(...).actions no es una función
[Pausa en este error]

$("tr input.action-select").actions();

/api/a...kstate/ (línea 55)

También viéndolo aquí. En mi caso, la versión Grappelli de actions.js no fue copiada en /static/admin/js/ por collectstatic . Todo lo que tuve que hacer fue copiarlo manualmente y todo funciona. Tuve el mismo problema con prepopulate.js .

@bjudson Gracias por la pista. Para mí resultó que collectstatic no copió todo. Lo ejecuté de nuevo y ahora todo funciona.

Mismo problema con Django 1.6 y Grappelli 2.5.0. Parchar ../grappelli/templates/admin/change_list.html como lo recomienda Vinyll soluciona mis problemas.

Django==1.8.2
Django-grappelli==2.7.1

El problema aún persiste, collectstatic no encuentra la carpeta admin/ static de grappellis por algún motivo.

Django==1.8.3
Django-grappelli==2.7.3

problema todavía aquí para mí

~django.contrib.admin.options.ModelAdmin# medios:635
si self.actions no es Ninguno:
js.append('acciones%s.js' % extra)

Si hace algo en una subclase ModelAdmin que evita que se llame a este método (propiedad), como redefinir la propiedad de medios sin llamar a este super, entonces no se cargan las acciones. Y tampoco obtiene la función de extensión de Form.media. Entonces, incluso si intenta poner acciones en su clase Media en la subclase, no se encuentra.

Por lo tanto, coloque un punto de verificación en ese método y asegúrese de que se llame.

Tuve el mismo problema y lo resolví editando la configuración de nginx.
Antes:
location /static/admin/ { alias /web/merv/env/lib/python3.4/site-packages/django/contrib/admin/static/admin/; }
location /static/ { alias /web/merv/files/static/; }
Después:
location /static/ { alias /web/merv/files/static/; }

Para mí, el problema sigue presente.
python 2.7, django 1.9.6, grappelli 2.8.1

Para resolver el problema, necesitaba comentar el bloque /static/admin/ en el archivo de configuración nginx del sitio web (como dijo @gameot ); Me gusta esto:

#location /static/admin/ {
#   alias /home/mohsen/virtualenvs/django-1.9/lib/python3.4/site-packages/django/contrib/admin/static/admin/;
#}

¡Podría borrarlo, por supuesto! Simplemente parece ser inútil cuando se usa grappelli.

Después de eso, haz el collectstatic como dice Grappelli docs: python manage.py collectstatic
Luego reinicie nginx.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

bob-r picture bob-r  ·  9Comentarios

asfaltboy picture asfaltboy  ·  11Comentarios

johncpang picture johncpang  ·  4Comentarios

adamchainz picture adamchainz  ·  24Comentarios

FrozenAlex picture FrozenAlex  ·  15Comentarios