Django-grappelli: Filter-Dropdown funktioniert aufgrund eines Javascript-Fehlers in Chrome, FF nicht

Erstellt am 1. Aug. 2011  ·  31Kommentare  ·  Quelle: sehmaschine/django-grappelli

Ich habe gerade Django-grappelli 2.3.4 in Kombination mit Django 1.4.0 alpha installiert. Alles ist in Ordnung, mit Ausnahme des Filter-Dropdown-Felds auf der Änderungslistenseite. Chrome und Firefox melden einen Javascript-Fehler:

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

Der relevante Code befindet sich in templates/admin/change_list.html. Ein Fix scheint den Block zu verschieben

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

von Zeile 19 bis Zeile 65, direkt nach {{ media.js }} . Ich glaube, das liegt daran, dass das Skript actions.js in den Block geladen wird, der in media.js enthalten ist, was _nach_ relevantem Javascript-Code kommt.

Ich bin mir nicht sicher, ob dies darauf zurückzuführen ist, dass sich der Django-Code noch in der Alpha-Phase befindet, aber ich dachte, ich würde es melden.

Gleichzeitig tritt ein weiterer Fehler von grp_collapsible in templates/admin/includes_grappelli/header.html :

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

Weiß aber nicht, wie man das beheben kann.

Hilfreichster Kommentar

Bei mir ist das Problem immer noch vorhanden.
Python 2.7, Django 1.9.6, Grappelli 2.8.1

Alle 31 Kommentare

hast du es mit django 1.3 versucht?

Nein Entschuldigung. Nur 1.4.0a. Ich bin ein wenig benommen, aber ich glaube, das ist meistens so
eine Grappelli-Sache: das Template change_list und die Reihenfolge von
Laden/Ausführen von Javascript-Code.

Ich war vielleicht ein bisschen zu hastig bei der Einreichung des Berichts und nicht streng
Genug beim Testen mit verschiedenen Django-Versionen - Entschuldigung!

Ehrlich gesagt ... ich glaube nicht, dass es ein Grappelli-Fehler ist. Andernfalls können Hunderte von Benutzern das Filter-Dropdown nicht verwenden, und ich glaube nicht, dass dies der Fall ist. Ich bin mir ziemlich sicher, dass es an 1.4.0a liegt ... und Grappelli wird immer gegen die neueste offizielle Version entwickelt.

Ich kann bestätigen, dass dies der Fall ist - das Filter-Dropdown funktioniert seit geraumer Zeit nicht mehr mit Django-Trunk. Ich habe die Grappelli-Vorlagen noch nicht berührt, um den Code wie von Swashbuckler vorgeschlagen zu verschieben.

Wenn Grappelli mit Django-Trunk auf dem Laufenden gehalten wird, dann ist dies ein Thema, das genauer betrachtet werden sollte. Ich vermute, es hat damit zu tun, dass Django 1.4 contrib.admin-Medien nach STATIC_URL verschoben und ADMIN_MEDIA_PREFIX veraltet hat.

Wenn Sie meinen letzten Kommentar lesen, werden Sie sehen, dass Grappelli nicht mit Djangos Trunk entwickelt wurde.

Sorry, zu schnell gelesen :)

Ich schließe dieses Ticket, da es sich auf die Djangos-Trunk-Version bezieht. docs wurden aktualisiert und es wurde ein Hinweis hinzugefügt, dass Grappelli immer gegen die neueste stabile Django-Version entwickelt wird.

Es sieht so aus, als ob dieses Problem weiterhin besteht, obwohl 1.4 vor einigen Tagen veröffentlicht wurde. Gibt es eine Chance, dass das behoben werden könnte?

Natürlich wird es behoben, sobald Grappelli mit Django 1.4 kompatibel ist

Gibt es eine Problemumgehung für diejenigen, die django1.4 verwenden?

Ich habe hier eine gefunden: http://groups.google.com/group/django-grappelli/browse_thread/thread/7b929047d316275f

Habe es aber nicht probiert.

Für diejenigen, die django1.4 verwenden, verwenden Sie den grappelli_2_4-Zweig.

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

Als ich das letzte Mal den Zweig überprüft habe, gab es große Probleme mit dem Markup, was das meiste davon im Geschäft unbrauchbar machte :(

Fangen Sie es mit Django 1.4.2 und Grappelli 2.4.3

Verwenden von Grappelli 2.4.3 + Django 1.4.3 mit Firefox 17 und dieser Fehlermeldung auf einer Seite mit Filtern:

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

Paginierungsleiste wurde an den Anfang der Liste verschoben, wobei sich die Filter nicht öffnen (siehe angehängtes Bild).

Cache leeren hilft nicht.

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

Scheint, dass die verwendete jquery in meinem Fall nicht geeignet ist (mehrere Versionen werden importiert, Skripte verwenden "grp.jQuery" anstelle von Standard).
Behoben durch Überschreiben von Vorlagen und Ersetzen von „grp.jQuery“ durch „django.jQuery“ im folgenden Code:

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

Das ergibt folgenden Code:

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

grp.jQuery muss da sein, sonst funktioniert kein js ... wir hatten dieses Problem bereits mit einem anderen Ticket und es stellte sich heraus, dass es ein Setup-Problem war. Sind Sie sicher, dass Ihre Javascript-Dateien korrekt geladen werden?

@sehmaschine Ich habe meinen Kommentar aktualisiert (unter Verwendung des Namensraums "django.jQuery" anstelle von "none").
grp.jQuery ist eigentlich 1.7.2, während django.jQuery 1.4.2 ist. Ich habe das Setup nicht viel in Admin und Grappelli angepasst. Ich habe vielleicht irgendwie ein Konfigurations-Setup verpasst, kann aber nicht herausfinden, was oder wo.

Zur Information, hier ist meine Quelldatei, die fehlschlägt. Und wo das Ändern von "grp.jQuery" in "django.jQuery" löst: https://gist.github.com/4452470

Sogar das Check-All-Kontrollkästchen ( ) funktioniert jetzt.

können Sie überprüfen, warum grp.jQuery nicht vorhanden ist? weil es sein sollte. Wie bereits erwähnt, funktionieren viele Dinge nicht wie erwartet, wenn grp.jQuery nicht vorhanden ist.

Ich habe das gleiche Problem (Django 1.5, Chrome 26). Wenn ich in der fraglichen Zeile ( $("tr input.action-select").actions(); ) unterbreche, ist grp.jQuery da, es hat einfach nicht die Methode actions() .

ack. gleiches Problem wie defrex

Ich sehe dasselbe wie Sie, @defrex , aber nur, wenn actions.min.js geladen ist. Wenn DEBUG=True, scheint alles in Ordnung zu sein. Ist das deinem @vongesell auch aufgefallen? Hat es einer von euch geschafft es zu reparieren?

Oh ja, dieselbe Version von Django und Chrome, und ich verwende Grappelli 2.4.4.

Gleiches Problem, Django==1.5, django-grappelli==2.4.4, Firefox 22.0 auf Ubuntu. Ausgabe der Firebug-Konsole:

TypeError: $(...).actions ist keine Funktion
[Unterbrechung bei diesem Fehler]

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

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

Auch hier zu sehen. In meinem Fall wurde die Grappelli-Version von actions.js nicht von collectstatic in /static/admin/js/ kopiert. Ich musste es nur manuell kopieren und alles funktioniert. Hatte das gleiche Problem mit prepopulate.js .

@bjudson Danke für den Hinweis. Bei mir stellte sich heraus, dass Collectstatic nicht alles kopiert hat. Ich habe es nochmal laufen lassen und jetzt funktioniert alles.

Gleiches Problem mit Django 1.6 und Grappelli 2.5.0. Das Patchen von ../grappelli/templates/admin/change_list.html wie von Vinyll empfohlen behebt meine Probleme.

Django==1.8.2
django-grappelli==2.7.1

Das Problem besteht weiterhin, collectstatic findet aus irgendeinem Grund den Grappellis-Ordner admin/static nicht.

Django==1.8.3
django-grappelli==2.7.3

Problem immer noch hier für mich

~django.contrib.admin.options.ModelAdmin# media:635
wenn self.actions nicht None ist:
js.append('actions%s.js' % extra)

Wenn Sie in einer ModelAdmin-Unterklasse etwas tun, das verhindert, dass diese Methode (Eigenschaft) aufgerufen wird, wie z. B. die Medieneigenschaft neu definieren, ohne diese Super-Eigenschaft aufzurufen, werden keine Aktionen geladen. Und Sie erhalten auch nicht die Erweiterungsfunktion von Form.media. Selbst wenn Sie versuchen, Aktionen in Ihrer Klasse Media in der Unterklasse abzulegen, wird sie nicht gefunden.

Setzen Sie also einen Prüfpunkt in diese Methode und stellen Sie sicher, dass sie aufgerufen wird.

Ich hatte das gleiche Problem und habe es gelöst, indem ich die nginx-Konfiguration bearbeitet habe.
Vor:
location /static/admin/ { alias /web/merv/env/lib/python3.4/site-packages/django/contrib/admin/static/admin/; }
location /static/ { alias /web/merv/files/static/; }
Nach dem:
location /static/ { alias /web/merv/files/static/; }

Bei mir ist das Problem immer noch vorhanden.
Python 2.7, Django 1.9.6, Grappelli 2.8.1

Um das Problem zu lösen, musste ich den Block /static/admin/ in der nginx-Konfigurationsdatei der Website kommentieren (wie @gameot sagte); so was:

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

Ich könnte es natürlich löschen! Es scheint nur nutzlos zu sein, wenn man Grappelli verwendet.

Führen Sie danach das Collectstatic aus, wie es in Grappelli-Dokumenten heißt: python manage.py collectstatic
Starten Sie dann nginx neu.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen