我正在尝试使用 Django 内置的 URL 转换器将 URL 中的日期时间字符串转换为视图中的日期对象。
如果我手动输入 URL,它们会按预期工作,但尝试为其生成 URL 时找不到匹配项。
我的转换器很简单:
from django.utils.timezone import datetime
from datetime import time
class DateConverter:
regex = '[0-9]{4}-[0-9]{2}-[0-9]{2}'
def to_python(self,value):
return datetime.strptime(value,"%Y-%m-%d")
def to_url(self,value):
return value.strftime("%Y-%m-%d")
class TimeConverter:
regex = '[0-9]{4}'
def to_python(self,value):
t = datetime.strptime(value,"%H%M")
return time(t.hour,t.minute)
def to_url(self,value):
return value.strftime("%H%M")
在我的模板中,我有一些嵌套循环,它们在我调用的可用时间段中循环url
对于每个时隙组合:
<a href="{% url 'club_boats:trip_booking' trip_date slot.slot.start_time slot.slot.end_time boat.boat.pk %}">Join</a>
My urls.py
文件是:
from django.urls import path, register_converter
from . import converters, views
register_converter(converters.DateConverter, 'date')
register_converter(converters.TimeConverter,'time')
urlpatterns = [
path('<int:boat_id>',views.detail,name='detail'),
path('<date:trip_date>/',views.day_view,name='day_view'),
path('<date:trip_date>/<time:trip_start_time>/<time:trip_end_time>/<int:boat>/',views.trip_booking,name='trip_booking'),
path('', views.day_view, name='day_view')
]
我已经确认数据类型与预期相匹配(时间、日期时间等),但反向转换似乎没有发生。
当我尝试加载包含上述内容的模板时url
调用我收到 NoReverseMatch 错误:
Reverse for 'trip_booking' with arguments '(datetime.datetime(2019, 7, 1, 0, 0), datetime.time(9, 0), datetime.time(12, 30), 1)' not found. 1 pattern(s) tried: ['club_boats/(?P<trip_date>[0-9]{4}-[0-9]{2}-[0-9]{2})\\/(?P<trip_start_time>[0-9]{4})\\/(?P<trip_end_time>[0-9]{4})\\/(?P<boat>[0-9]+)\\/$']
显然它看到了模式,但缺少了一些东西。