Django-grappelli: 由于 Chrome、FF 中的 Javascript 错误,过滤器下拉菜单不起作用

创建于 2011-08-01  ·  31评论  ·  资料来源: sehmaschine/django-grappelli

我刚刚结合 Django 1.4.0 alpha 安装了 django-grappelli 2.3.4。 一切都很好,除了更改列表页面上的过滤器下拉框。 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包含的块中,该块是_after_相关的Javascript代码。

不确定这是否是 Django 代码仍处于 alpha 阶段的结果,但我想我会报告它。

templates/admin/includes_grappelli/header.html grp_collapsible同时发生另一个错误:

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

不过,不知道如何解决这个问题。

最有用的评论

对我来说问题仍然存在。
python 2.7,django 1.9.6,grappelli 2.8.1

所有31条评论

你尝试过 django 1.3 吗?

不,对不起。 仅 1.4.0a。 我有点昏昏沉沉,但我相信主要是
一个grappelli的东西:模板change_list和顺序
加载/执行 Javascript 代码。

可能是我上报有点仓促,不够严谨
足以用不同的 django 版本进行测试——抱歉!

老实说......我不认为这是一个grappelli错误。 否则数百名用户将无法使用过滤器下拉菜单,我认为情况并非如此。 我很确定这是因为 1.4.0a ......而且 grappelli 总是针对最新的官方版本开发的。

我可以确认是这种情况——过滤器下拉菜单已经有一段时间没有使用 django-trunk 了。 我还没有碰过 Grappelli 模板来按照 swashbuckler 的建议移动代码。

如果 Grappelli 与 django-trunk 保持同步,那么这是一个应该更仔细研究的问题。 我怀疑这与 Django 1.4 将 contrib.admin 媒体移动到 STATIC_URL 并弃用 ADMIN_MEDIA_PREFIX 有关。

如果您阅读我的最后一条评论,您会发现 grappelli 不是使用 djangos trunk 开发的。

对不起,我读得太快了:)

我正在关闭这张票,因为它与 djangos 主干版本有关。 文档已更新,并添加了一条注释,指出 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 相同的问题

我看到的和你一样, @defrex ,但只有在加载 actions.min.js 时。 如果 DEBUG=True 一切似乎都很好。 你的@vongesell 也注意到了吗? 你们中的任何一个人都设法解决了吗?

哦,是的,相同版本的 Django 和 Chrome,我使用的是 grappelli 2.4.4。

同样的问题,Django==1.5,django-grappelli==2.4.4,Ubuntu 上的 Firefox 22.0。 Firebug 控制台输出:

TypeError: $(...).actions 不是函数
[打破这个错误]

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

/api/a...kstate/(第 55 行)

在这里也看到了。 就我而言, actions.js的 Grappelli 版本没有被collectstatic复制到/static/admin/js/ #$ 中。 我所要做的就是手动复制它,一切正常。 与prepopulate.js有同样的问题。

@bjudson感谢您的提示。 对我来说,事实证明 collectstatic 并没有复制所有内容。 我再次运行它,现在一切正常。

Django 1.6 和 Grappelli 2.5.0 也有同样的问题。 修补 ../grappelli/templates/admin/change_list.html 就像 Vinyll 推荐的那样解决了我的问题。

Django==1.8.2
django-grappelli==2.7.1

问题仍然存在,collectstatic 出于某种原因找不到 grappellis admin/static 文件夹。

Django==1.8.3
django-grappelli==2.7.3

我的问题仍然存在

~django.contrib.admin.options.ModelAdmin# media:635
如果 self.actions 不是无:
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/; }

对我来说问题仍然存在。
python 2.7,django 1.9.6,grappelli 2.8.1

为了解决这个问题,我需要在网站的 nginx 配置文件中注释 /static/admin/ 块(如@gameot所说); 像这样:

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

我当然可以删除它! 使用 grappelli 时似乎没用。

之后按照 grappelli 文档所说的那样做 collectstatic:python manage.py collectstatic
然后重启nginx。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

asfaltboy picture asfaltboy  ·  11评论

FrozenAlex picture FrozenAlex  ·  15评论

adamchainz picture adamchainz  ·  24评论

bob-r picture bob-r  ·  9评论

johncpang picture johncpang  ·  4评论