【问题标题】:Pass a datetime object to url in django将日期时间对象传递给 django 中的 url
【发布时间】:2018-12-06 16:00:19
【问题描述】:

如何传递日期时间,例如datetime.date(2017, 12, 31) 对象指向 django 中的 url?

我的模板:

{% 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+)/$']

【问题讨论】:

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


    【解决方案1】:

    您不能将日期时间对象转换为字符串并传递它。

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

    这将产生

    '02/23/2012'
    

    将其传递给您的网址。

    【讨论】:

      【解决方案2】:

      您的网址格式中的组selected_day 只能包含单词字符\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 格式 (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


      【讨论】:

        【解决方案3】:

        如果您使用时区感知日期(您应该这样做),最好的方法是:

        r'^(?P\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3} Z)/'

        示例:'2019-07-18T17:12:32.909Z'

        【讨论】:

          猜你喜欢
          • 2022-09-24
          • 2018-07-29
          • 2017-10-08
          • 1970-01-01
          • 2019-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多