Django-grappelli: A lista suspensa do filtro não funciona devido a um erro de Javascript no Chrome, FF

Criado em 1 ago. 2011  ·  31Comentários  ·  Fonte: sehmaschine/django-grappelli

Acabei de instalar o django-grappelli 2.3.4 em combinação com o Django 1.4.0 alpha. Está tudo bem, exceto pela caixa suspensa de filtro na página da lista de alterações. O Chrome e o Firefox relatam um erro de 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

A parte relevante do código está em templates/admin/change_list.html. Uma correção parece estar movendo o bloco

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

da linha 19 até a linha 65, logo após {{ media.js }} . Acredito que isso ocorra porque o script actions.js é carregado no bloco contido por media.js , que vem _depois_ do código Javascript relevante.

Não tenho certeza se isso é resultado do código Django ainda estar em alfa, mas imaginei que deveria denunciá-lo.

Outro erro ocorre ao mesmo tempo por grp_collapsible em templates/admin/includes_grappelli/header.html :

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

Não sei como consertar isso, no entanto.

Comentários muito úteis

Para mim o problema ainda está presente.
python 2.7, django 1.9.6, grappelli 2.8.1

Todos 31 comentários

você tentou com o django 1.3?

Não, desculpe. Apenas 1.4.0a. Estou um pouco grogue, mas acredito que seja principalmente
uma coisa grappelli: o template change_list e a ordem de
carregar/executar código Javascript.

Posso ter sido um pouco precipitado ao apresentar o relatório, e não rigoroso
o suficiente em testes com diferentes versões do django -- desculpas!

honestamente... não acho que seja um erro de grappelli. caso contrário, centenas de usuários não poderão usar o filtro suspenso e não acho que seja o caso. Tenho certeza que é por causa do 1.4.0a... e o grappelli é sempre desenvolvido com base na última versão oficial.

Posso confirmar que é o caso - o filtro suspenso não funciona com o django-trunk há algum tempo. Ainda não toquei nos modelos Grappelli para mover o código como sugerido pelo swashbuckler.

Se o Grappelli é mantido atualizado com o django-trunk, então é um problema que deve ser analisado mais de perto. Eu suspeito que tem a ver com o Django 1.4 movendo a mídia contrib.admin para STATIC_URL e depreciando ADMIN_MEDIA_PREFIX.

se você ler meu último comentário, verá que o grappelli não é desenvolvido com o tronco do djangos.

Desculpe, li muito rápido :)

Estou fechando este ticket pois está relacionado à versão trunk do djangos. docs foram atualizados e uma nota foi adicionada de que o grappelli é sempre desenvolvido em relação à última versão estável do django.

Parece que esse problema persiste com a versão 1.4 lançada há alguns dias. Alguma chance de isso ser consertado?

claro, isso será corrigido assim que o grappelli for compatível com o Django 1.4

Existe uma solução alternativa para aqueles que usam django1.4?

para aqueles que usam django1.4, use o branch 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

da última vez, quando verifiquei a filial, havia grandes problemas com marcação, o que tornou a maior parte inutilizável nos negócios :(

pegue-o com django 1.4.2 e grappelli 2.4.3

Usando Grappelli 2.4.3 + Django 1.4.3 com Firefox 17 e tendo esta mensagem de erro na página com filtros:

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

a barra de paginação foi movida para o topo da lista com os filtros não abrindo (veja a imagem anexada).

Limpar o cache não ajuda.

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

Parece que o jquery usado não é apropriado no meu caso (várias versões são importadas, os scripts usam "grp.jQuery" em vez do padrão).
Corrigido substituindo templates e substituindo "grp.jQuery" por "django.jQuery" no seguinte código:

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

Isso resulta no seguinte código:

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

grp.jQuery precisa estar lá, caso contrário nenhum js funcionará ... já tivemos esse problema com outro ticket e acabou sendo um problema de configuração. você tem certeza de que seus arquivos javascript estão sendo carregados corretamente?

@sehmaschine Atualizei meu comentário (usando o namespace "django.jQuery" em vez de nenhum).
grp.jQuery é na verdade 1.7.2 enquanto django.jQuery é 1.4.2. Eu não personalizei muito a configuração em admin e grappelli. Eu posso ter perdido alguma configuração de alguma forma, mas não consigo descobrir o que ou onde.

Para obter informações, aqui está meu arquivo de origem que falha. E onde mudar "grp.jQuery" para "django.jQuery" resolve: https://gist.github.com/4452470

Até mesmo a caixa de seleção check-all ( ) funciona agora.

você pode verificar por que grp.jQuery não está lá? porque deveria ser. como mencionado anteriormente, se grp.jQuery não estiver lá, muitas coisas não funcionarão como esperado.

Estou tendo esse mesmo problema (Django 1.5, Chrome 26). Se eu quebrar a linha em questão ( $("tr input.action-select").actions(); ), grp.jQuery está lá, só não tem o método actions() .

ack. mesmo problema que defrex

Estou vendo a mesma coisa que você, @defrex , mas apenas quando actions.min.js é carregado. Se DEBUG=True tudo parece bem. Seu @vongesell também notou isso? Algum de vocês conseguiu consertar?

Ah sim, mesma versão do Django e do Chrome, e estou usando o grappelli 2.4.4.

Mesmo problema, Django==1.5, django-grappelli==2.4.4, Firefox 22.0 no Ubuntu. Saída do console do Firebug:

TypeError: $(...).actions não é uma função
[Interromper este erro]

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

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

Também vendo aqui. No meu caso, a versão Grappelli de actions.js não foi copiada para /static/admin/js/ por collectstatic . Tudo o que tive que fazer foi copiá-lo manualmente e tudo funciona. Tive o mesmo problema com prepopulate.js .

@bjudson Obrigado pela dica. Para mim, o collectstatic não copiou tudo. Executei novamente e agora tudo funciona.

Mesmo problema com Django 1.6 e Grappelli 2.5.0. Patch ../grappelli/templates/admin/change_list.html como recomendado por Vinyll corrige meus problemas.

Django==1.8.2
django-grappelli==2.7.1

O problema ainda persiste, o collectstatic não encontra a pasta grappellis admin/static por algum motivo.

Django==1.8.3
django-grappelli==2.7.3

problema ainda está aqui para mim

~django.contrib.admin.options.ModelAdmin# media:635
se self.actions não for Nenhum:
js.append('actions%s.js'% extra)

Se você fizer algo em uma subclasse ModelAdmin que impeça que esse método (propriedade) seja chamado, como redefinir a propriedade de mídia sem chamar essa super, então você não terá ações carregadas. E você também não obtém o recurso de extensão do Form.media. Portanto, mesmo que você tente colocar ações em sua classe Media na subclasse, ela não será encontrada.

Então, coloque um ponto de verificação nesse método e certifique-se de que ele está sendo chamado.

Eu tive o mesmo problema e resolvi editando nginx config.
Antes 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/; }
Depois de:
location /static/ { alias /web/merv/files/static/; }

Para mim o problema ainda está presente.
python 2.7, django 1.9.6, grappelli 2.8.1

Para resolver o problema precisei comentar o bloco /static/admin/ no arquivo de configuração nginx do site (como disse o @gameot ); assim:

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

Eu poderia excluí-lo, é claro! Parece ser inútil ao usar grappelli.

Depois disso, faça o collectstatic como grappelli docs diz: python manage.py collectstatic
Em seguida, reinicie o nginx.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

karansag picture karansag  ·  55Comentários

FrozenAlex picture FrozenAlex  ·  15Comentários

adamchainz picture adamchainz  ·  24Comentários

bob-r picture bob-r  ·  9Comentários

asfaltboy picture asfaltboy  ·  11Comentários