Agosto se aproxima e com ele alguns eventos bacanas de informática no Espírito Santo. No dia 19 de agosto, acontecerá o II Liberdade Interativa, na Faesa da Av. Vitória. Na ocasião, apresentarei a palestra “Django: o framework web para perfeccionistas … Continue lendo →
Leia essa entrada em seu contexto
original »
Estamos vivendo o que alguns chamam de “explosão mobile”, um tempo onde um número cada vez maior de dispositivos móveis — como tablets e smartphones — se tornam parte significante da Web. Esta é a razão pela qual ter seu … Continue lendo →
Leia essa entrada em seu contexto
original »
We are living what some people call the “mobile explosion”, a time where an increasing number of portable devices — like tablets and smartphones — are becoming a significant part of the Web. This is the reason why having your … Continue lendo →
Leia essa entrada em seu contexto
original »
Uma pergunta que frequentemente é feita na lista ou no canal (#django-br) da comunidade Django brasileira e quase sempre não é respondida é: 'Como utilizar o widget de data do admin do Django em um formulário normal?'.
O admin do Django é uma das ferramentas mais espetaculares do framework, e um dos motivos disso são seus belos widgets. Um dos principais widgets é o widget para datas. Esse campo trabalha com datas de uma forma bacana, sem contar com o calendário que vem com ele.
Mas, voltando à pergunta, é possível sim utilizar esse widget, e se estiver utilizando o branch do newforms-admin isso é muito fácil.
Para demonstrar isso através da prática, iremos precisar de um model. Para isso vamos criar um model Noticia, para um sistema de notícias onde seus campos seriam: titulo, conteúdo e data:
class Noticia:
titulo = models.CharField(max_length=255)
conteudo = models.TextField()
data = models.DateTimeField()
Agora vamos criar um formulário para cadastrar as notícias. Eu geralmente gosto de criar um arquivo chamado forms.py onde eu coloco as classes responsáveis pelos meus formulários.
Eu vou criar um formulário utilizando o ModelForm que gera um formulário a partir de um model. E irei sobrescrever o campo data, configurando ele para utilizar o widget de data do newforms-admin.
É preciso também, importar as classes e métodos necessário para utilizar o newforms, ModelForm e as classes referentes ao widget que vamos utilizar.
from django.newforms import ModelForm
from django import newforms as forms
from django.contrib.admin.widgets import AdminDateWidget
from models import *
class NoticiaForm(ModelForm):
data = forms.DateTimeField(widget=AdminDateWidget())
class Meta:
model = Noticia
Vamos então criar uma view que enviará para uma template o nosso formulário.
from django.shortcuts import render_to_response
from forms import *
def index(request):
form = NoticiaForm()
return render_to_response('index.html', {'form':form})
Agora vamos criar a template que exibirá nosso formulário, lembrando de importar os javascripts e arquivos css necessários para exibir o widget de data corretamente.
<html>
<head>
<link rel="stylesheet" type="text/css" href="/admin_media/css/base.css" />
<link rel="stylesheet" type="text/css" href="/admin_media/css/forms.css" />
<link rel="stylesheet" type="text/css" href="/admin_media/css/widgets.css" />
<script type="text/javascript" src="/admin/jsi18n/"></script>
<script src="/admin_media/js/core.js"></script>
<script src="/admin_media/js/dateparse.js"></script>
<script src="/admin_media/js/timeparse.js"></script>
<script src="/admin_media/js/calendar.js"></script>
<script src="/admin_media/js/admin/DateTimeShortcuts.js" type="text/javascript"></script>
</head>
<body>
{{ form.as_p }}
</body>
</html>
E finalmente vamos configurar as urls.
from django.conf.urls.defaults import *
from noticias.views import *
from django.contrib import admin
urlpatterns = patterns('',
(r'^$', index),
('^admin/(.*)', admin.site.root),
)
Lembrando que para o widget funcionar corretamente é preciso que o admin esteja adicionado nas INSTALED_APPS no arquivo settings.py do seu projeto e que o admin esteja adicionado no urls.py.
Para não ter erro estou adicionando um arquivo compactado com um projeto exemplo para vocês fazerem o download.
Leia essa entrada em seu contexto
original »