Django-grappelli: Раскрывающийся список фильтров не работает из-за ошибки Javascript в Chrome, FF

Созданный на 1 авг. 2011  ·  31Комментарии  ·  Источник: sehmaschine/django-grappelli

Я только что установил django-grappelli 2.3.4 в сочетании с альфа-версией Django 1.4.0. Все в порядке, за исключением раскрывающегося списка фильтров на странице списка изменений. Chrome и Firefox сообщают об ошибке 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

Соответствующий фрагмент кода находится в templates/admin/change_list.html. Исправление, кажется, перемещает блок

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

со строки 19 до строки 65, сразу после {{ media.js }} . Я считаю, что это связано с тем, что скрипт actions.js загружается в блок, содержащийся в media.js , который идет _после_ соответствующего кода Javascript.

Не уверен, что это результат того, что код Django все еще находится в альфа-версии, но решил сообщить об этом.

В то же время возникает другая ошибка на grp_collapsible в templates/admin/includes_grappelli/header.html :

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

Однако не знаю, как это исправить.

Самый полезный комментарий

Для меня проблема все еще присутствует.
питон 2.7, джанго 1.9.6, граппелли 2.8.1

Все 31 Комментарий

вы пробовали с джанго 1.3?

Нет простите. Просто 1.4.0а. Я немного не в себе, но я думаю, что это в основном
вещь граппелли: шаблон change_list и порядок
загрузка/выполнение кода Javascript.

Возможно, я был слишком поспешным при подаче отчета и не был строгим.
достаточно тестирования с разными версиями django - извиняюсь!

честно... я не думаю, что это ошибка граппелли. в противном случае сотни пользователей не смогут использовать раскрывающийся список фильтров, и я не думаю, что это так. Я почти уверен, что это из-за версии 1.4.0a... а граппелли всегда разрабатывается с учетом последней официальной версии.

Я могу подтвердить, что это так: раскрывающийся список фильтров уже давно не работает с django-trunk. Я еще не трогал шаблоны Граппелли, чтобы переместить код, как предложил головорез.

Если Grappelli постоянно обновляется с помощью django-trunk, то на эту проблему следует обратить более пристальное внимание. Я подозреваю, что это связано с тем, что Django 1.4 перемещает медиафайл contrib.admin на STATIC_URL и объявляет устаревшим ADMIN_MEDIA_PREFIX.

если вы прочитаете мой последний комментарий, вы увидите, что граппелли не разработан с помощью ствола djangos.

Извините, быстро прочитал :)

Я закрываю этот тикет, так как он связан с версией магистрали djangos. docs были обновлены и добавлено примечание о том, что grappelli всегда разрабатывается для последней стабильной версии django.

Похоже, что эта проблема сохраняется, поскольку несколько дней назад была выпущена версия 1.4. Есть ли шанс, что это можно исправить?

конечно, это будет исправлено, как только Grappelli будет совместим с django 1.4.

Есть ли обходной путь для тех, кто использует django1.4?

Я нашел один здесь: http://groups.google.com/group/django-grappelli/browse_thread/thread/7b929047d316275f

Хотя не пробовал.

для тех, кто использует django1.4, используйте ветку 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

в прошлый раз, когда я проверял ветку, были огромные проблемы с разметкой, из-за чего большую часть ее нельзя было использовать в бизнесе :(

поймайте это с помощью django 1.4.2 и grappelli 2.4.3

Использование Grappelli 2.4.3 + Django 1.4.3 с Firefox 17 и наличие этого сообщения об ошибке на странице с фильтрами:

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

панель пагинации сломалась - переместилась в начало списка, фильтры не открываются (см. прикрепленное изображение).

Очистка кеша не помогает.

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

Кажется, что используемый jquery не подходит в моем случае (импортируется несколько версий, скрипты используют «grp.jQuery» вместо значения по умолчанию).
Исправлено путем переопределения шаблонов и замены «grp.jQuery» на «django.jQuery» в следующем коде:

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

Это приводит к следующему коду:

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

grp.jQuery должен быть там, иначе js не будет работать ... у нас уже была эта проблема с другим билетом, и оказалось, что это проблема установки. вы уверены, что ваши javascript-файлы загружаются правильно?

@sehmaschine Я обновил свой комментарий (используя пространство имен «django.jQuery» вместо отсутствия).
grp.jQuery на самом деле 1.7.2, а django.jQuery — 1.4.2. Я не сильно настраивал настройки в admin и grappelli. Возможно, я как-то пропустил какую-то настройку конфигурации, но не могу понять, что и где.

Для информации, вот мой исходный файл, который терпит неудачу. И где изменение «grp.jQuery» на «django.jQuery» решает: https://gist.github.com/4452470

Даже флажок «Отметить все» ( ) сейчас работает.

Вы можете проверить, почему grp.jQuery не существует? потому что так должно быть. как упоминалось ранее, если grp.jQuery отсутствует, многие вещи не будут работать должным образом.

У меня такая же проблема (Django 1.5, Chrome 26). Если я прерву указанную строку ( $("tr input.action-select").actions(); ), grp.jQuery будет там, просто у него нет метода actions() .

акк. та же проблема, что и у дефрекса

Я вижу то же самое, что и вы, @defrex , но только когда загружается action.min.js. Если DEBUG=True, то все нормально. Ваш @vongesell тоже это заметил? Кому-то из вас удалось это исправить?

Ах да, та же версия Django и Chrome, и я использую grappelli 2.4.4.

Та же проблема, Django == 1.5, django-grappelli == 2.4.4, Firefox 22.0 в Ubuntu. Вывод консоли Firebug:

TypeError: $(...).actions не является функцией
[Перерыв на этой ошибке]

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

/api/a...kstate/ (строка 55)

Тоже вижу здесь. В моем случае версия Grappelli actions.js не была скопирована в /static/admin/js/ с помощью collectstatic . Все, что мне нужно было сделать, это скопировать его вручную, и все работает. Была такая же проблема с prepopulate.js .

@bjudson Спасибо за подсказку. Для меня оказалось, что collectstatic не все скопировал. Я запустил его снова, и теперь все работает.

Та же проблема с Django 1.6 и Grappelli 2.5.0. Исправление ../grappelli/templates/admin/change_list.html, рекомендованное Vinyll, устраняет мои проблемы.

Джанго==1.8.2
джанго-граппелли == 2.7.1

Проблема все еще сохраняется, collectstatic по какой-то причине не находит папку admin/static grappellis.

Джанго==1.8.3
джанго-граппелли == 2.7.3

проблема все еще здесь для меня

~django.contrib.admin.options.ModelAdmin# медиа:635
если self.actions не None:
js.append('actions%s.js' % дополнительно)

Если вы делаете что-то в подклассе ModelAdmin, что предотвращает вызов этого метода (свойства), например, переопределение свойства мультимедиа без вызова этого супер-свойства, то вы не загружаете действия. И вы также не получаете функцию расширения Form.media. Таким образом, даже если вы попытаетесь поместить действия в свой класс Media в подкласс, они не будут найдены.

Итак, поставьте контрольную точку в этот метод и убедитесь, что он вызывается.

У меня была такая же проблема, и я решил ее, отредактировав конфиг nginx.
До:
location /static/admin/ { alias /web/merv/env/lib/python3.4/site-packages/django/contrib/admin/static/admin/; }
location /static/ { alias /web/merv/files/static/; }
После:
location /static/ { alias /web/merv/files/static/; }

Для меня проблема все еще присутствует.
питон 2.7, джанго 1.9.6, граппелли 2.8.1

Для решения проблемы мне нужно было прокомментировать блок /static/admin/ в конфигурационном файле nginx веб-сайта (как сказал @gameot ); так:

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

Я мог бы удалить его, конечно! Это просто кажется бесполезным при использовании граппелли.

После этого выполните collectstatic, как говорится в документах grappelli: python manage.py collectstatic
Затем перезапустите nginx.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги