Джанго дата в JavaScript на шаблоне - PullRequest
17 голосов
/ 22 февраля 2011

Каков будет простой способ достижения такого уровня ниже? selected_date происходит из контекста django как дата на питоне:

<script type="text/javascript">
    var selected_year = {{ selected_date|date:"Y" }}
    var selected_month = {{ selected_date|date:"m" }} - 1;
    var selected_day = {{ selected_date|date:"d"}}
    var selected_date = new Date(selected_year, selected_month, selected_day);
    alert(selected_date);
</script>

Ответы [ 5 ]

46 голосов
/ 22 февраля 2011

У меня был большой успех с функцией isoformat в python:

var selected_date = new Date("{{ selected_date.isoformat }}")
12 голосов
/ 08 июля 2011

Принятый ответ может генерировать неправильную дату в зависимости от локали.

В консоли FF:

>>> n = new Date('2011-01-01');
Date {Fri Dec 31 2010 16:00:00 GMT-0800 (PST)}

Поэтому предпочтительно передавать целые числа Y, m, d в конструктор Date.

Я использую шаблонный фильтр для генерации конструктора даты:

@register.filter(name='jsdate')
def jsdate(d):
    """formats a python date into a js Date() constructor.
    """
    try:
        return "new Date({0},{1},{2})".format(d.year, d.month - 1, d.day)
    except AttributeError:
        return 'undefined'
7 голосов
/ 11 мая 2011

Я использовал это и понял, что Android возвращал «Недопустимую дату» при анализе - я думаю, что он более строгий, чем настольный Webkit. Вместо этого я использую следующее, которое, кажется, работает:

new Date('{{ talk.start_datetime|date:"D, d M Y H:i:s"}}'),

Подробнее о разборе даты JS здесь: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse

1 голос
/ 07 декабря 2016

Если вы используете свою дату в JS, вам нужно использовать фильтр escapejs.

<script type="text/javascript">
    var selected_date = new Date({{ selected_date|escapejs }});
    alert(selected_date);
</script>

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#escapejs

0 голосов
/ 29 октября 2014

Поскольку другие подходы не учитывают часовой пояс, вы можете просто использовать встроенный шаблонный тег Django widthratio , чтобы преобразовать секунды питона в миллисекунды JavaScript.

new Date({% widthratio selected_date|date:"U" 1 1000 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...