quarta-feira, 12 de janeiro de 2011

Como converter html special chars

Caso seja necessário converter um espaço " " para &nbsp; "<" para &lt; ">" para &gt; e assim por diante, basta fazer o seguinte:

from django.utils.html import escape
print escape('<div class="teste">teste de conversão de caracteres especiais do html</div>')


hasta!

terça-feira, 11 de janeiro de 2011

Efetuando buscas utilizando "OR"

Para realizar buscas utilizando  "OR" basta fazer conforme abaixo:

from django.db.models import Q
resultados = <Classe>.objects.filter(Q(<campo1>__icontains=<keyword>) | Q(<campo2>__icontains=<keyword>))

Note que o icontans apenas foi utilzado como exemplo, poderia ser feito com quaisquer outros fields lookups (http://docs.djangoproject.com/en/dev/ref/models/querysets/#field-lookups)

Substituindo os devidos campos por seus respectivos nomes, será obtido em resultados uma query que busca em um ou em outro campo satisfazendo a respectiva condição.

hasta!

Paginando Resultados com Django Pagination

Nada de limit, top. Não iremos usar nem o slice na view e não será necessário nem criar controles para pegar a página atual, a anterior controlar parametros já enviados de busca.

Como? Django Pagination.

Basta pegar o projeto disponibilizado aqui (http://code.google.com/p/django-pagination/)  colocá-lo na raiz do seu projeto.

No arquivo settings.py poucas alterações:

  • Adicione o Pagination a tupla INSTALLED_APPS:
    • ...
      'pagination',
      ...
  • Adicione o Middleware do Pagination à tupla MIDDLEWARE_CLASSES:
    • ...
      'pagination.middleware.PaginationMiddleware',
      ...
  • E por sim no template, onde quiser paginar os resultados basta seguir a seguintes alterações:
    • Carregue o template_tags do Pagination:
      • {% load pagination_tags %}
    • Defina logo acima do "for" que correrá todos os resultados obtidos na view a seguinte linha, substituindo com as devidas informações:
      • {% autopaginate <SUA_QUERY_SET> <NRO_REGISTROS_POR_PAG> %}
    • Para os botões de contre, adicone o código a seguir:
      • {% paginate %}
Lembre-se de não filtrar os resultados na sua view, pra que o trabalho se tem algo eficiente que faz por você? 

hasta!

terça-feira, 4 de janeiro de 2011

Erro: ManagementForm data is missing or has been tampered with

Quando a versão dos templates em TEMPLATE_DIRS/admin está incompatível com a versão do django que está rodando, normalmente faltam os campos hiddens necessários para o correto funcionamento do admin.

Caso o admin esteja personalizado ou a edição estiver no front, basta colocar a linha abaixo no template para inserir os campos necessários.

{{ formset.management_form }}


hasta!