Django-grappelli: La liste déroulante des filtres ne fonctionne pas en raison d'une erreur Javascript dans Chrome, FF

Créé le 1 août 2011  ·  31Commentaires  ·  Source: sehmaschine/django-grappelli

Je viens d'installer django-grappelli 2.3.4 en combinaison avec Django 1.4.0 alpha. Tout va bien, à l'exception de la liste déroulante des filtres sur la page de la liste des modifications. Chrome et Firefox signalent une erreur 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

Le morceau de code pertinent se trouve dans templates/admin/change_list.html. Un correctif semble déplacer le bloc

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

de la ligne 19 à la ligne 65, juste après {{ media.js }} . Je pense que c'est parce que le script actions.js est chargé dans le bloc contenu par media.js , qui vient _après_ le code Javascript pertinent.

Je ne sais pas si cela est dû au fait que le code Django est toujours en alpha, mais j'ai pensé que je le signalerais.

Une autre erreur se produit en même temps par grp_collapsible dans templates/admin/includes_grappelli/header.html :

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

Je ne sais pas comment réparer celui-ci, cependant.

Commentaire le plus utile

Pour moi le problème est toujours présent.
python 2.7, django 1.9.6, grappelli 2.8.1

Tous les 31 commentaires

as-tu essayé avec django 1.3 ?

Non désolé. Juste 1.4.0a. Je suis un peu groggy, mais je crois que c'est surtout
un truc grappelli : le template change_list et l'ordre des
charger/exécuter du code Javascript.

J'ai peut-être été un peu trop hâtif dans le dépôt du rapport, et pas rigoureux
assez de tests avec différentes versions de Django - excuses !

honnêtement ... je ne pense pas que ce soit une erreur de grappelli. sinon des centaines d'utilisateurs ne pourront pas utiliser la liste déroulante des filtres et je ne pense pas que ce soit le cas. Je suis presque sûr que c'est à cause de la 1.4.0a ... et grappelli est toujours développé par rapport à la dernière version officielle.

Je peux confirmer que c'est le cas - la liste déroulante des filtres ne fonctionne pas avec django-trunk depuis un certain temps. Je n'ai pas encore touché aux templates Grappelli pour déplacer le code comme suggéré par swashbuckler.

Si Grappelli est tenu à jour avec django-trunk, c'est un problème qui devrait être examiné de plus près. Je soupçonne que cela a à voir avec Django 1.4 déplaçant le média contrib.admin vers STATIC_URL et dépréciant ADMIN_MEDIA_PREFIX.

si vous lisez mon dernier commentaire vous verrez que grappelli n'est pas développé avec le tronc djangos.

Désolé, j'ai lu trop vite :)

Je ferme ce ticket car il est lié à la version tronc de Djangos. La documentation a été mise à jour et une note a été ajoutée indiquant que Grappelli est toujours développé avec la dernière version stable de Django.

Il semble que ce problème persiste avec la sortie de la version 1.4 il y a quelques jours. Une chance que cela puisse être corrigé ?

bien sûr, cela sera corrigé une fois que grappelli sera compatible avec django 1.4

Existe-t-il une solution de contournement pour ceux qui utilisent django1.4 ?

J'en ai trouvé un ici : http://groups.google.com/group/django-grappelli/browse_thread/thread/7b929047d316275f

Je n'ai pas essayé cependant.

pour ceux qui utilisent django1.4, utilisez la branche 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 dernière fois que j'ai vérifié la succursale, il y avait d'énormes problèmes de balisage, ce qui en a rendu la majeure partie inutilisable en entreprise :(

attrapez-le avec django 1.4.2 et grappelli 2.4.3

Utiliser Grappelli 2.4.3 + Django 1.4.3 avec Firefox 17 et avoir ce message d'erreur sur la page ayant des filtres :

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

la barre de pagination s'est cassée - déplacée en haut de la liste avec des filtres qui ne s'ouvrent pas (voir l'image ci-jointe).

Vider le cache n'aide pas.

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

Il semble que le jquery utilisé ne soit pas approprié dans mon cas (plusieurs versions sont importées, les scripts utilisent "grp.jQuery" au lieu de la valeur par défaut).
Corrigé en remplaçant les modèles et en remplaçant "grp.jQuery" par "django.jQuery" dans le code suivant :

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

Cela se traduit par le code suivant :

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

grp.jQuery doit être là, sinon aucun js ne fonctionnera ... nous avons déjà eu ce problème avec un autre ticket et il s'est avéré que c'était un problème de configuration. êtes-vous sûr que vos fichiers javascript sont chargés correctement ?

@sehmaschine J'ai mis à jour mon commentaire (en utilisant l'espace de noms "django.jQuery" au lieu de none).
grp.jQuery est en fait 1.7.2 tandis que django.jQuery est 1.4.2. Je n'ai pas beaucoup personnalisé la configuration dans admin et grappelli. J'ai peut-être manqué une configuration de configuration d'une manière ou d'une autre, mais je n'arrive pas à comprendre quoi ni où.

Pour information, voici mon fichier source qui échoue. Et où changer "grp.jQuery" en "django.jQuery" résout : https://gist.github.com/4452470

Même la case à cocher tout cocher ( ) fonctionne maintenant.

pouvez-vous vérifier pourquoi grp.jQuery n'est pas là ? parce que ça devrait l'être. comme mentionné précédemment, si grp.jQuery n'est pas là, beaucoup de choses ne fonctionneront pas comme prévu.

J'ai le même problème (Django 1.5, Chrome 26). Si je casse sur la ligne en question ( $("tr input.action-select").actions(); ), grp.jQuery est là, il n'a tout simplement pas la méthode actions() .

ack. même problème que defrex

Je vois la même chose que vous, @defrex , mais seulement lorsque actions.min.js est chargé. Si DEBUG=True, tout semble correct. Votre @vongesell l'a-t-il également remarqué ? L'un de vous a-t-il réussi à le réparer ?

Oh oui, même version de Django et Chrome, et j'utilise grappelli 2.4.4.

Même problème, Django==1.5, django-grappelli==2.4.4, Firefox 22.0 sur Ubuntu. Sortie de la console Firebug :

TypeError : $(...).actions n'est pas une fonction
[Pause sur cette erreur]

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

/api/a...kstate/ (ligne 55)

Voir aussi ici. Dans mon cas, la version Grappelli de actions.js n'a pas été copiée dans /static/admin/js/ par collectstatic . Tout ce que j'avais à faire était de le copier manuellement et tout fonctionne. J'ai eu le même problème avec prepopulate.js .

@bjudson Merci pour l'indice. Pour moi, il s'est avéré que collectstatic n'a pas tout copié. Je l'ai relancé et maintenant tout fonctionne.

Même problème avec Django 1.6 et Grappelli 2.5.0. Patcher ../grappelli/templates/admin/change_list.html comme recommandé par Vinyll résout mes problèmes.

Django==1.8.2
django-grappelli==2.7.1

Le problème persiste toujours, collectstatic ne trouve pas le dossier admin/static de grappellis pour une raison quelconque.

Django==1.8.3
django-grappelli==2.7.3

problème toujours là pour moi

~django.contrib.admin.options.ModelAdmin# media:635
si self.actions n'est pas None :
js.append('actions%s.js' % extra)

Si vous faites quelque chose dans une sous-classe ModelAdmin qui empêche cette méthode (propriété) d'être appelée, comme redéfinir la propriété media sans appeler celle-ci, alors vous n'obtenez pas d'actions chargées. Et vous n'obtenez pas non plus la fonctionnalité d'extension de Form.media. Ainsi, même si vous essayez de mettre des actions dans votre classe Media dans la sous-classe, elles ne sont pas trouvées.

Donc, placez un point de contrôle dans cette méthode et assurez-vous qu'elle est appelée.

J'ai eu le même problème et je l'ai résolu en modifiant la configuration nginx.
Avant de:
location /static/admin/ { alias /web/merv/env/lib/python3.4/site-packages/django/contrib/admin/static/admin/; }
location /static/ { alias /web/merv/files/static/; }
Après:
location /static/ { alias /web/merv/files/static/; }

Pour moi le problème est toujours présent.
python 2.7, django 1.9.6, grappelli 2.8.1

Pour résoudre le problème, j'avais besoin de commenter le bloc /static/admin/ dans le fichier de configuration nginx du site Web (comme l'a dit @gameot ); comme ça:

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

Je pourrais le supprimer bien sûr ! Cela semble juste être inutile lors de l'utilisation de grappelli.

Après cela, faites le collectstatic comme le dit la documentation de grappelli : python manage.py collectstatic
Redémarrez ensuite nginx.

Cette page vous a été utile?
0 / 5 - 0 notes