如何传递日期时间,例如 datetime.date(2017,12,31)是否指向Django中的网址?
我的模板:
{% for key, value in my_dictionary.items %}
{{ key.0 }} # it displays Dec. 31, 2017
...
{% endfor %}
以以下方式将其传递到网址:
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+)/$']
答案 0 :(得分:2)
您的网址格式中的组selected_day
只能包含文字字符\w
。其中包括数字,但不包括空格或破折号。
url(r'^my-date/(?P<selected_day>\w+)/$', name='my_date')
如果您将iso8601日期格式用作日期字符串,则可以使用此网址格式。
url(r'^my-date/(?P<selected_day>\d{4}-\d{2}-\d{2})/$', name='my_date')
默认情况下,仅在日期对象上使用str(date)
即可使用iso格式(YYYY-MM-DD)。您可以在视图函数中将日期字符串解析为日期对象。但是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
答案 1 :(得分:0)
您不能将datetime对象转换为字符串并将其传递。
CustomFieldViewModel
这将产生
string
将其传递到您的网址。
答案 2 :(得分:0)
如果您使用时区感知日期(应该使用),则最好的方法是:
r'^(?P \ d {4}-\ d {2}-\ d {2} T \ d {2}:\ d {2}:\ d {2}。\ d {3} Z)/'
示例:“ 2019-07-18T17:12:32.909Z”