Django自定义URL映射:模板中的日期模式不匹配

2024-09-25 00:35:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django3.2

我创建了一个自定义日期URL模式匹配器,如下所示:

helpers.py

from datetime import datetime

class DateConverter:
    regex = '\d{4}\d{2}\d{2}'

    def to_python(self, value):
        return datetime.strptime(value, '%Y%m%d')

    def to_url(self, value):
        return value

url.py

from django.urls import path, register_converter

from . import views
from myproj.helpers import DateConverter

app_name = 'event'

register_converter(DateConverter, 'yyyymmdd')

urlpatterns = [
    path('', views.index, name='index'),
    path('detail/<int:event_id>/<slug:event_slug>', views.detail, name='detail'),
    path('archive/<yyyymmdd:start_date>/<yyyymmdd:end_date>', views.archive, name='archive'),        
]

index.html(相关章节)

  <div class="row">
    <a href="{% url 'event:archive' '2020101' '2020201' %}">Previous Events</a>
  </div>

我得到以下错误:

reverse for 'archive' with arguments '('2020101', '2020201')' not found. 1 pattern(s) tried: ['media/events/archive/(?P<start_date>\d{4}\d{2}\d{2})/(?P<end_date>\d{4}\d{2}\d{2})$']

我该如何解决这个问题


Tags: pathnamefromimporteventurldatetimedate
2条回答

您的日期字符串错误。事实上,它被解释为:

2020101
YYYYMMDD

因此,该月缺少一个数字,因此正确的日期如下所示:

{% url 'event:archive' '20200101''20200201' %}"

有没有可能你输入的数字不够?您的DateConverter需要4+2+2=8位数字,您输入的数字只有7位

相关问题 更多 >