Передать объект datetime в URL в Django - PullRequest
0 голосов
/ 27 июня 2018

Как я могу передать дату, например, datetime.date (2017, 12, 31) объект для ссылки в django?

Мой шаблон:

{% for key, value in my_dictionary.items %}
    {{ key.0 }}  # it displays Dec. 31, 2017
    ...
{% endfor %} 

Передавая его в URL как:

href="{% url 'my_url:my_date' selected_day=key.0 %}">

Мои urls.py:

url(r'^my-date/(?P<selected_day>\w+)/$', name='my_date')

Ошибка:

Exception Type: NoReverseMatch
Exception Value: Reverse for 'my_date' with keyword arguments 
'{'selected_day': datetime.date(2017, 12, 31),}'not found. 1 pattern(s) tried: ['my-url/my-date/(?P<selected_day>\\w+)/$']

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Группа selected_day в вашем шаблоне URL может содержать только слова \w. Это включает цифры, но не пробелы и тире.

url(r'^my-date/(?P<selected_day>\w+)/$', name='my_date')

Если вы используете формат даты iso8601 для вашей строки даты, вы можете использовать этот шаблон URL.

url(r'^my-date/(?P<selected_day>\d{4}-\d{2}-\d{2})/$', name='my_date')

Простое использование str(date) для объекта даты должно использовать формат ISO по умолчанию (ГГГГ-ММ-ДД). Вы можете проанализировать строку даты для объекта даты в вашей функции просмотра. Но django QuerySets будет принимать строки даты в качестве аргументов, поэтому этот шаг может не потребоваться.

def my_date_view(request, selected_day):
    # this works with either a date object or a iso formatted string.
    queryset = MyModel.objects(published_on=selected_day) 

    # or use strptime to get a date object.
    date = datetime.datetime.strptime(selected_day, '%Y-%M-%d').date()

Django также включает в себя служебную функцию, которую вы можете использовать для разбора строк дат: django.utils.dateparse.parse_date


0 голосов
/ 22 июля 2019

Наилучшим подходом, если вы используете даты с указанием часового пояса (что вам следует), было бы следующее:

г '^ (Р \ д {4} - \ d {2} - \ d {2} Т \ д {2}:?. \ Д {2}: \ д {2} \ d {3} Z) / '

Пример: '2019-07-18T17: 12: 32,909Z'

0 голосов
/ 27 июня 2018

Вы не можете преобразовать объект datetime в строку и передать его.

t = datetime.date(2017, 12, 31)
t.strftime('%m/%d/%Y')

Это даст

'02/23/2012'

передать это на ваш URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...