Tratando data de RSS com Django templates
O sistema de templates do Django permite a criação de tags e filtros para que possamos formatar ou tratar o conteúdo em um template de acordo com nosso desejo. (Veja mais na documentação do Django). Devido a filosofia do framework, é muito fácil criar um novo filtro para um tratamento específico. E foi exatamente isso que precisamos fazer.
A tarefa consistia em fazer uma simples formatação de data. Esta data estava no formato GMT (Ex: Sun, 19 May 2002 15:21:36 GMT) e precisávamos recuperar apenas a hora e o minuto (Ex: 15h21). Aparentemente, seria fácil fazer a conversão, utilizando a função strptime da classe datetime. Esta função transforma uma string em data, através da equiparação do formato da data.
from datetime import * rss_date = "Sun, 19 May 2002 15:21:36 GMT" date_format = "%a, %d %b %Y %H:%M:%S %z" new_date = datetime.strptime(rss_date, date_format) ##ERRO ##ValueError: 'z' is a bad directive in format '%a, %d %b %Y %H:%M:%S %z'
Como podemos ver no erro destacado, ao utilizarmos essa função, há um problema de reconhecimento do atributo %z, responsável pela representação do fuso horário, apesar de constar da documentação oficial. Verificamos o arquivo /usr/lib/python2.5/_strptime.py e identificamos que a classe não implementa este atributo. Após uma breve pesquisa no Google, identificamos que possivelmente na versão 2.6 o parâmetro já esteja sendo suportado, mas ainda não fomos a fundo nessa questão. E como precisamos usar Python 2.5, resolvemos partir para uma nova e simples solução, que era apenas parsear a string pela posição dos caracteres.
@register.filter def rss_date(value): return value[17:19] + "H|" + value[20:22]
O código acima registra um filtro para ser usado no template HTML. Não achamos que essa seja a solução ideal, mas devido ao problema de versão optamos por utilizá-la. Veja a seguir como utilizar no template.
{{item.date | rss_date}}