Como posso alterar o formato do modelo de data padrão do Django?

100

Tenho datas no formato ISO 8601 no banco de dados %Y-%m-%d,. No entanto, quando a data é passada para o modelo, surge algo como Oct. 16, 2011.

Existe uma maneira de manipular o formato para o que eu quiser?

bash-
fonte

Respostas:

56

date tag modelo

settings.DATE_FORMAT

Ignacio Vazquez-Abrams
fonte
Não sei como mudaria isso no arquivo de configurações
bash
3
Da mesma forma que você altera todas as outras configurações.
Ignacio Vazquez-Abrams
22
O link para os documentos não é realmente uma resposta, então votei contra isso e votei contra a resposta de medmunds.
Eric
275

Dentro do seu template, você pode usar o datefiltro do Django . Por exemplo:

<p>Birthday: {{ birthday|date:"M d, Y" }}</p>

Dá:

Aniversário: 29 de janeiro de 1983

Mais exemplos de formatação nos documentos do filtro de data .

Medmunds
fonte
Acho que isso funciona apenas se a data for fornecida como um objeto datetime. E se for apenas uma string passada de vista?
Mohammed Shareef C
2
Para uma string arbitrária contendo uma data / hora, provavelmente eu a analisaria em uma data e hora python no código de exibição. (Ou mesmo antes, se possível - onde quer que aquela string de data chegue primeiro em meu código.) Mas se você realmente deseja usar strings para passar data e hora para seus templates Django, esta resposta parece útil.
medmunds
O exemplo acima perfeito para usar no arquivo de modelo.
Vinod Patidar
30

Defina ambos DATE_FORMATeUSE_L10N

Para fazer alterações em todo o site no Django 1.4.1, adicione:

DATE_FORMAT = "Y-m-d"

ao seu settings.pyarquivo e edite:

USE_L10N = False

uma vez que l10n substitui DATE_FORMAT

Isso está documentado em: https://docs.djangoproject.com/en/dev/ref/settings/#date-format

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fonte
20

Basta usar isto:

{{you_date_field|date:'Y-m-d'}}

Isso mostrará algo como 2016-10-16 . Você pode usar o formato que desejar.

hardcoderrsl
fonte
8

Para alterar o formato da data no views.py e então atribuí-lo ao template.

# get the object details 
home = Home.objects.get(home_id=homeid)

# get the start date
_startDate = home.home_startdate.strftime('%m/%d/%Y')

# assign it to template 
return render_to_response('showme.html' 
                                        {'home_startdate':_startDate},   
                                         context_instance=RequestContext(request) )  
kta
fonte
8

O que você precisa é de um filtro de modelo de data .

por exemplo:

<td>Joined {{user.date_created|date:"F Y" }}<td>

Isso retorna Joined December 2018

Toluwalemi
fonte
6

Se precisar mostrar data e hora abreviadas (08/11/2018 03:23), você pode fazer assim:

{{your_date_field|date:"SHORT_DATE_FORMAT"}} {{your_date_field|time:"h:i a"}}

Detalhes para esta tag aqui e mais sobre datas de acordo com o formato fornecido aqui

Exemplo:

<small class="text-muted">Last updated: {{your_date_field|date:"SHORT_DATE_FORMAT"}} {{your_date_field|time:"h:i a"}}</small>
Nilsoviani
fonte