quarta-feira, 7 de maio de 2014

Paginação estilo Twitter com Django CBV e django-endless-pagination



Quem já não precisou fazer uma paginação ao estilo do twitter? Bom não é complicado. Pelo menos não com as dicas abaixo!

Requisitos necessários:

  • Python >= 2.6
  • Django >= 1.3
  • jQuery >= 1.7


Instalação:
pip install django-endless-pagination

Configuração:


Adicione a app na setting INSTALLED_APPS no settings.py:
...
'endless_pagination',
...

Adicione a linha abaixo na setting TEMPLATE_CONTEXT_PROCESSORS também no settings.py:
...
'django.core.context_processors.request',
...

Na views.py

from django.shortcuts import render, render_to_response, get_object_or_404
from django.template import Context, loader, RequestContext
from .models import Produto

class ProdutoTTPag(View):
 def get(self, request, *args, **kwargs):

  template = 'produtos/lista-produtos.html'
  page_template = 'produtos/paginacao.html'

  produtos = Produto.objects.filter(ativo=True)
  
  context = {
   'page_template': page_template,
   'produtos_list' : produtos,
  }

  if request.is_ajax():
   template = page_template

  return render_to_response(template, context, context_instance=RequestContext(request))


No urls.py

Adicione a linha abaixo:
...
url(r'^(?P[-\w]+)/$', views.ProdutoTTPag.as_view(), name='produtos'),
...


No template:

Aqui será necessário a criação de dois arquivos html. Um para ser de fato a lista (lista-produtos.html) e o outro para ser apenas os itens, para que o ajax possa trazê-los de forma correta (paginacao.html).

lista-produtos.html:
...
{% load endless %}
...

{% block extra_js %}
    <script src="{{ STATIC_URL }}endless_pagination/js/endless-pagination.js" type="text/javascript"></script>
    <script type="text/javascript">
     jQuery(document).ready(function($) {
      //$.endlessPaginate({
         //    paginateOnScroll: true,
         //    paginateOnScrollChunkSize: 5,
         //    paginateOnScrollMargin: 200
         //});

      $.endlessPaginate({});
     });
    </script>
{% endblock extra_js %}

...
<section class="list-products">
 <ul>
  {% include page_template %}
 </ul>
...
</section>

Aqui a parte comentada serve para trazer os resultados das outras páginas conforme o scroll da página.

paginacao.html:

{% load endless %}

{% paginate 9 produtos_list %}
{% for p in produtos_list %}
 <li>
  {# HTML PARA ITEM DO PRODUTO #}
 </li>
{% endfor %}
{% show_more %}

Mais informações em:

  1. http://django-endless-pagination.readthedocs.org/en/latest/index.html
  2. https://github.com/frankban/django-endless-pagination
  3. https://pypi.python.org/pypi/django-endless-pagination/2.0


hasta!

sábado, 26 de abril de 2014

Instalação do Vagrant no Windows com instalador MSI

Instalar o vagrant no windows agora ficou muito mais fácil. Diferente de todos os passos vistos em Instalação do Vagrant no windows, agora tem um instalador.

Tentei instalar seguindo os passos do tutorial anterior e recebi uma mensagem de aviso dizendo que o Vagrant agora não era mais recomendado baixar como uma ruby gem, e esta não terá mais suporte nem atualizações. Ainda é possível instalar segundo os passos da mensagem, mas este não é o objetivo deste tutorial.

Vamos lá.

  1. Baixe e instale o Oracle Virtual Box no link https://www.virtualbox.org/wiki/Downloads
  2. Adicione o caminho da instalação no PATH do windows.
  3. Baixe e instale o instalador para sua windows no link http://www.vagrantup.com/downloads
  4. Crie uma pasta chamada vagrant-machine no disco C (C:) para facilitar o acesso via prompt.
  5. Abra o promt de comando (cmd) e acesse a pasta recém criada:
    1. cd c:\vagrant-machine
  6. Execute os comandos:
    1. vagrant init hashicorp/precise32
      1. Este comando criará o Vagrantfile
    2. vagrant up
      1. Este comando colocará a maquina virtual em execução
    3. sudo apt-get install libxml2-dev libxslt1-dev python-libxml2 python-setuptools git-core build-essential libxml2-dev libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev libgeoip-dev memcached libmemcached-dev python-mysqldb libmysqlclient16-dev python-virtualenv
    4. sudo apt-get update
    5. sudo apt-get install python-virtualenv
    6. sudo apt-get build-dep python-imaging
    7. sudo sh postinstall.sh
    8. Abra o arquivo Vagrantfile dentro de C:\vagrant-machine e descomente a linha
      1. config.vm.network "forwarded_port", guest: 80, host: 8080
    9. Adicione abaixo portas extras
      1. config.vm.network "forwarded_port", guest: 8000, host: 8000
      2. config.vm.network "forwarded_port", guest: 8001, host: 8001
      3. config.vm.network "forwarded_port", guest: 8002, host: 8002
    10. Adicione abaixo de
      # config.vm.synced_folder "../data", "/vagrant_data":
      1.  
        config.vm.synced_folder "../wamp/www", "/projetos"
    11. sudo apt-get install git
    12. Crie o ENV 
      1. virtualenv --no-site-packages --unzip-setuptools django16
    13. Ligar o ENV
      1. . django16/bin/activate
    14. Instale primeiro o driver do MySQL que é o que dá mais trabalho:
      1. sudo apt-get build-dep python-mysqldb
      2. sudo pip install MySQL-python
    15. Alguns aplicativos uteis:
      1. BeautifulSoup==3.2.1
      2. Django==1.6.3
      3. Fabric==1.8.3
      4. MySQL-python==1.2.5
      5. PIL==1.1.7
      6. Pillow==2.4.0
      7. South==0.8.4
      8. argparse==1.2.1
      9. distribute==0.6.24
      10. django-appconf==0.6
      11. django-ckeditor-updated==4.2.8
      12. django-compressor==1.3
      13. django-localflavor==1.0
      14. django-pagination==1.0.7
      15. django-simple-captcha==0.4.2
      16. django-subdomains==2.0.4
      17. easy-thumbnails==2.0.1
      18. ecdsa==0.11
      19. paramiko==1.12.3
      20. pycrypto==2.6.1
      21. simplejson==3.4.0
      22. six==1.6.1
      23. sorl-thumbnail==11.12.1b
      24. wsgiref==0.1.2
    16. Salve esta lista num arquivo txt(requirements.txt) e execute o comando:
      1. pip install -r requirements.txt

quarta-feira, 16 de abril de 2014

error: command 'cc' failed with exit status 1

Problemas para instalação das libs do python no ENV no Mavericks?

Com o ENV ligado, se a instalação de algum pacote apresentar o seguinte erro:

error: command 'cc' failed with exit status 1

Execute estas duas linhas no seu shell:

export CFLAGS=-Qunused-arguments

export CPPFLAGS=-Qunused-arguments


Essas exportações dizem ao compilador para ignorar argumentos não utilizados, em vez de reclamar sobre eles.

A razão parece ser que Python compila módulos usando as opções com que ele foi construído, exceto uma dessas opções não funciona mais em mavericks.

Agora é só instalar suas libs normalmente com o pip.


hasta!