Django-grappelli: Drop-down filter tidak berfungsi karena kesalahan Javascript di Chrome, FF

Dibuat pada 1 Agu 2011  ·  31Komentar  ·  Sumber: sehmaschine/django-grappelli

Saya baru saja menginstal Django-grappelli 2.3.4 dalam kombinasi dengan Django 1.4.0 alpha. Semuanya baik-baik saja, kecuali kotak drop-down filter pada halaman daftar perubahan. Chrome dan Firefox melaporkan kesalahan 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

Bit kode yang relevan ada di templates/admin/change_list.html. Perbaikan tampaknya memindahkan blok

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

dari baris 19 ke baris 65, tepat setelah {{ media.js }} . Saya percaya ini karena skrip actions.js dimuat di blok yang berisi media.js , yang datang _after_ kode Javascript yang relevan.

Tidak yakin apakah ini hasil dari kode Django yang masih dalam versi alfa, tetapi saya pikir saya akan melaporkannya.

Kesalahan lain terjadi pada saat yang sama oleh grp_collapsible di templates/admin/includes_grappelli/header.html :

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

Tidak tahu bagaimana untuk memperbaiki yang satu ini, meskipun.

Komentar yang paling membantu

Bagi saya masalah masih ada.
python 2.7, Django 1.9.6, grappelli 2.8.1

Semua 31 komentar

apakah Anda mencoba dengan Django 1.3?

Tidak, maaf. Hanya 1.4.0a. Saya sedikit pusing, tapi saya yakin itu sebagian besar
hal grappelli: template change_list dan urutan
memuat/mengeksekusi kode Javascript.

Saya mungkin agak terlalu tergesa-gesa dalam mengajukan laporan, dan tidak ketat
cukup dalam pengujian dengan versi Django yang berbeda -- maaf!

jujur ​​... Saya tidak berpikir itu kesalahan grappelli. jika tidak, ratusan pengguna tidak akan dapat menggunakan drop-down filter dan saya rasa bukan itu masalahnya. Saya cukup yakin itu karena 1.4.0a ... dan grappelli selalu dikembangkan melawan rilis resmi terbaru.

Saya dapat mengkonfirmasi bahwa memang demikian--filter drop-down tidak bekerja dengan Django-trunk untuk beberapa waktu. Saya belum menyentuh template Grappelli untuk memindahkan kode seperti yang disarankan swashbuckler.

Jika Grappelli tetap up-to-date dengan Django-trunk maka itu adalah masalah yang harus dilihat lebih dekat. Saya menduga itu ada hubungannya dengan Django 1.4 memindahkan media contrib.admin ke STATIC_URL dan menghentikan ADMIN_MEDIA_PREFIX.

jika Anda membaca komentar terakhir saya, Anda akan melihat bahwa grappelli tidak dikembangkan dengan Djangos trunk.

Maaf, saya membacanya terlalu cepat :)

Saya menutup tiket ini karena ini terkait dengan versi trunk Djangos. docs telah diperbarui dan catatan telah ditambahkan bahwa grappelli selalu dikembangkan terhadap rilis Django stabil terbaru.

Sepertinya masalah ini berlanjut dengan 1.4 dirilis beberapa hari yang lalu. Adakah kemungkinan ini bisa diperbaiki?

tentu saja, itu akan diperbaiki setelah grappelli kompatibel dengan Django 1.4

Apakah ada solusi bagi mereka yang menggunakan Django1.4?

bagi mereka yang menggunakan Django1.4, gunakan cabang 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

terakhir kali ketika saya memeriksa cabang ada masalah besar dengan markup, yang membuat sebagian besar tidak dapat digunakan dalam bisnis :(

tangkap dengan Django 1.4.2 dan grappelli 2.4.3

Menggunakan Grappelli 2.4.3 + Django 1.4.3 dengan Firefox 17 dan memiliki pesan kesalahan ini di halaman yang memiliki filter:

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

bilah pagination pecah-pindah ke daftar teratas dengan filter tidak terbuka (lihat gambar terlampir).

Membersihkan cache tidak membantu.

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

Tampaknya jquery yang digunakan tidak sesuai dalam kasus saya (beberapa versi diimpor, skrip menggunakan "grp.jQuery" alih-alih default).
Diperbaiki dengan mengganti template dan mengganti "grp.jQuery" dengan "Django.jQuery" dalam kode berikut:

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

Itu menghasilkan kode berikut:

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

grp.jQuery harus ada di sana, jika tidak, js tidak akan berfungsi ... kami sudah memiliki masalah itu dengan tiket lain dan ternyata itu masalah penyiapan. apakah Anda yakin file javascript Anda dimuat dengan benar?

@sehmaschine Saya memperbarui komentar saya (menggunakan namespace "Django.jQuery" alih-alih tidak ada).
grp.jQuery sebenarnya 1.7.2 sedangkan Django.jQuery adalah 1.4.2. Saya tidak banyak menyesuaikan pengaturan di admin dan grappelli. Saya mungkin melewatkan beberapa pengaturan konfigurasi, tetapi tidak tahu apa atau di mana.

Sebagai informasi, inilah file sumber saya yang gagal. Dan di mana mengubah "grp.jQuery" menjadi "Django.jQuery" memecahkan: https://Gist.github.com/4452470

Bahkan kotak centang semua ( ) bekerja sekarang.

dapatkah Anda memeriksa mengapa grp.jQuery tidak ada? karena itu seharusnya. seperti yang disebutkan sebelumnya, jika grp.jQuery tidak ada, banyak hal tidak akan berfungsi seperti yang diharapkan.

Saya mengalami masalah yang sama (Django 1.5, Chrome 26). Jika saya melanggar baris yang dimaksud ( $("tr input.action-select").actions(); ), grp.jQuery ada, hanya saja tidak memiliki metode actions() .

ack. masalah yang sama dengan deflex

Saya melihat hal yang sama seperti Anda, @defrex , tetapi hanya ketika actions.min.js dimuat. Jika DEBUG=True semuanya tampak baik-baik saja. Sudahkah @vongesell Anda memperhatikannya juga? Apakah salah satu dari Anda berhasil memperbaikinya?

Oh ya, versi Django dan Chrome yang sama, dan saya menggunakan grappelli 2.4.4.

Masalah yang sama, Django==1.5, Django-grappelli==2.4.4, Firefox 22.0 di Ubuntu. Keluaran konsol pembakar:

TypeError: $(...).actions bukan fungsi
[Hancurkan Kesalahan Ini]

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

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

Juga melihatnya di sini. Dalam kasus saya, versi Grappelli dari actions.js tidak disalin ke /static/admin/js/ oleh collectstatic . Yang harus saya lakukan adalah menyalinnya secara manual dan semuanya berfungsi. Punya masalah yang sama dengan prepopulate.js .

@bjudson Terima kasih atas petunjuknya. Bagi saya ternyata collectstatic tidak menyalin semuanya. Saya menjalankannya lagi dan sekarang semuanya berfungsi.

Masalah yang sama dengan Django 1.6 dan Grappelli 2.5.0. Menambal ../grappelli/templates/admin/change_list.html seperti yang direkomendasikan oleh Vinyll memperbaiki masalah saya.

Django==1.8.2
django-grappelli==2.7.1

Masalah masih berlanjut, collectstatic tidak menemukan folder admin/statis grappellis karena beberapa alasan.

Django==1.8.3
django-grappelli==2.7.3

masalah masih di sini untukku

~django.contrib.admin.options.ModelAdmin# media:635
jika self.actions bukan None:
js.append('tindakan%s.js' % ekstra)

Jika Anda melakukan sesuatu di subkelas ModelAdmin yang mencegah metode (properti) ini dipanggil, seperti mendefinisikan ulang properti media tanpa memanggil yang super ini, maka tindakan Anda tidak akan dimuat. Dan Anda juga tidak mendapatkan fitur perpanjangan dari Form.media. Jadi, bahkan jika Anda mencoba menempatkan tindakan di Media kelas Anda di subkelas, tindakan itu tidak akan ditemukan.

Jadi, beri tanda centang pada metode itu dan pastikan itu dipanggil.

Saya memiliki masalah yang sama dan saya menyelesaikannya dengan mengedit konfigurasi nginx.
Sebelum:
location /static/admin/ { alias /web/merv/env/lib/python3.4/site-packages/django/contrib/admin/static/admin/; }
location /static/ { alias /web/merv/files/static/; }
Setelah:
location /static/ { alias /web/merv/files/static/; }

Bagi saya masalah masih ada.
python 2.7, Django 1.9.6, grappelli 2.8.1

Untuk memecahkan masalah, saya perlu mengomentari blok /static/admin/ di file konfigurasi nginx situs web (seperti yang dikatakan @gameot ); seperti ini:

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

Saya bisa menghapusnya tentu saja! Sepertinya tidak ada gunanya saat menggunakan grappelli.

Setelah itu lakukan collectstatic seperti yang dikatakan grappelli docs: python manage.py collectstatic
Kemudian restart nginx.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat