Как передать дату и id через url в django

Я пытаюсь передать дату и id через url, но получаю ошибку, раньше я передавал только id и обычно делал это следующим образом.

path('user_payment_menu/<int:pk>/',user_payment_menu, name='user_payment_menu'),

но теперь я хочу, чтобы дата проходила после int:pk/ но когда я добавляю дату после слэша, я получаю ошибку.

Это просто:

path('user_payment_menu/<int:pk>/<str:date>',user_payment_menu, name='user_payment_menu'),

и вы можете использовать его следующим образом:

reverse('user_payment_menu', args=[1, str(date.today()])

Наверное, самый простой способ определения date - это пользовательский конвертер путей. Вы можете реализовать это с помощью:

# app_name/converters.py

class DateConverter:
    regex = '\d{4}-\d{1,2}-\d{1,2}'
    format = '%Y-%m-%d'

    def to_python(self, value):
        return datetime.strptime(value, self.format).date()

    def to_url(self, value):
        return value.strftime(self.format)

Тогда вы можете зарегистрировать формат и использовать конвертер путей <date:…>:

# app_name/urls.py

from django.urls import path, register_converter
from app_name.converters import DateConverter
from app_name.views import user_payment_menu

register_converter(DateConverter, 'date')

urlpatterns = [
    path('user_payment_menu/<int:pk>/<date:mydate>/',user_payment_menu, name='user_payment_menu'),

затем в представлении вы определяете дополнительный атрибут, который будет содержать date как объект date:

# app_name/views.py

def user_payment_menu(request, pk, mydate):
    # …

Вы можете использовать объект date при генерации URL, например, с:

{% url 'user_payment_menu' pk=somepk mydate=somedate %}
Вернуться на верх