Filtros no Admin do Django

August 25, 2010

O Admin automático do Django é uma mão na roda. Já disse isso. Mas nada é perfeito!

Algo que me incomodava bastante era o fato da barra de filtros que aparece do lado direito da tela de listagem ser uma lista de links. Funciona muito bem quando a lista é pequena (10, no máximo 20 elementos). Mas quando a lista é muito grande, ou então pode ter tamanho variável, a coisa fica fora de controle. Meu sonho era poder colocar uma caixa de seleção.

Esta semana, resolvi fuçar um pouco e entender como funciona. E não é que é fácil?

Resumindo: o responsável por renderizar o filtro é um arquivo chamado filter.html, que fica na pasta de templates do admin (django/contrib/admin/templates/admin). O jeito então é substituir o arquivo, e o jeito elegante de fazer esta substituição é criar uma pasta admin dentro da pasta de templates do seu projeto e criar o arquivo filter.html lá.

Para aqueles que tem preguiça de pesquisar como colocar uma caixa de seleção, eis o código que eu usei:

{% load i18n %}
<h3>{% blocktrans with title as filtertitle %} By {{ filtertitle }} {% endblocktrans %}</h3>
<ul>
<select onchange='window.location=this.value;'>
{% for choice in choices %}
<option value="{{ choice.query_string|iriencode }}" 
{% if choice.selected %}selected{% endif %}>{{ choice.display }}
</option>
{% endfor %}
</select>
</ul>
O resultado final é esse:

Filtro de listagem com Caixa de Seleção

Pra quem quiser aprender um pouco mais sobre customizações do admin do django, a fonte boa é esta: http://docs.djangoproject.com/en/1.2/obsolete/admin-css/

posted in Desenvolvimento by Miguel Galves

Follow comments via the RSS Feed | Leave a comment | Trackback URL

  • Ffreitasalves

    Eu gostei, mas o meu não ficou bonitinho como o seu. A caixa de seleção.

  • Brunovam

    valeu, mto bom!

  • Fabriciojca

    Muito bom. Parabéns

blog comments powered by Disqus

Switch to our mobile site

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org