Django URL конвертеры для значений даты / времени - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь использовать преобразователи URL, встроенные в Django, для преобразования строки даты и времени в 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>

Мой 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]+)\\/$']

Очевидно, что он видит шаблон, ночего-то не хватает.

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