Как изменить формат объекта DateTimeField при его отображении в HTML с помощью Ajax?
models.py
class Log(models.Model):
source = models.CharField(max_length=1000, default='')
date = models.DateTimeField(default=datetime.now, blank = True)
views.py
Объекты в модели Log фильтруются таким образом, что рассматриваются только те, имена источников которых соответствуют определенному имени учетной записи. Значения этих допустимых объектов будут перечислены и возвращены с помощью JsonResponse.
def backlog_list(request):
account_name = request.POST['account_name']
access_log = Log.objects.filter(source=account_name)
return JsonResponse({"access_log":list(access_log.values())})
dashboard.html
Этот Ajax-скрипт возвращает имя учетной записи в views.py. Если нет допустимых объектов, HTML будет пустым; однако, в противном случае он отобразит его как this.
<h3>You scanned the QR code during these times.</h3>
<div id="display">
</div>
<script>
$(document).ready(function(){
setInterval(function(){
$.ajax({
type: 'POST',
url : "/backlog_list",
data:{
account_name:$('#account_name').val(),
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
},
success: function(response){
console.log(response);
$("#display").empty();
for (var key in response.access_log)
{
var temp="<div class='container darker'><span class='time-left'>"+response.access_log[key].date+"</span></div>";
$("#display").append(temp);
}
},
error: function(response){
alert('An error occurred')
}
});
},1000);
})
</script>
Моя цель состоит в том, чтобы дата и время отображались как "Jan. 10, 2000, 9:30:20 A.M."
Я попробовал изменить формат непосредственно из models.py, добавив "strftime", но срабатывает ответ на ошибку.
Вы пытаетесь отформатировать дату в HTML, добавив ее к строке. К сожалению, это не сработает, потому что значение даты будет рассматриваться как строка, а не как объект даты.
Чтобы отформатировать дату нужным образом, необходимо преобразовать ее в объект даты в JavaScript, а затем использовать функцию форматирования даты для преобразования ее в нужный формат строки.
Вот пример того, как это можно сделать:
// Parse the date value from the response into a date object
var date = new Date(response.access_log[key].date);
// Use the toLocaleDateString() function to format the date as "Jan. 10, 2000"
var dateString = date.toLocaleDateString('en-US', {
month: 'short',
day: 'numeric',
year: 'numeric'
});
// Use the toLocaleTimeString() function to format the time as "9:30:20 A.M."
var timeString = date.toLocaleTimeString('en-US', {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hour12: true
});
// Append the formatted date and time to the HTML
var temp="<div class='container darker'><span class='time-left'>" + dateString + ", " + timeString + "</span></div>";
$("#display").append(temp);
Подробнее о функциях toLocaleDateString()
и toLocaleTimeString()
можно прочитать в документации по JavaScript:
Один из способов установить нужный вам формат - с помощью Javascript, Tharun опубликовал пример в своем ответе.
Альтернативно, вы можете указать нужный вам формат в views.py
:
def backlog_list(request):
...
dates = [
val.strftime('%b. %d, %Y, %I:%M:%S %p')
for val in access_log.values_list("date", flat=True)
]
return JsonResponse({"access_log":[{"date": d for d in dates}]})
Ссылка на строку формата - https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes