将日期时间对象传递给Django中的url

时间:2018-06-27 17:09:39

标签: python django python-3.x datetime url

如何传递日期时间,例如 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+)/$']

3 个答案:

答案 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”