Django 2.0 URL正则表达式

时间:2018-01-23 17:43:30

标签: python django django-2.0

我正在尝试设置一个偏移但我想通过仅允许一位或两位数字将其限制为最多99小时,但我不确定与Django 2.0一起使用的语法。我试图寻找更新的文档,但我找不到它,也许我错过了,但在发布之前我确实看过。

以下是我的views.py文件中的代码:

# Creating a view for showing current datetime + and offset of x amount of hrs
    def hours_ahead(request, offset):
        try:
            offset = int(offset)
        except ValueError:
            # Throws an error if the offset contains anything other than an integer
            raise Http404()
        dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
        html = "<html><body>In %s hour(s), it will be  %s.</body></html>" % (offset, dt)
        return HttpResponse(html)

这是我的urls.py文件中的代码,这允许我传递一个整数,但我想将其限制为仅1位或2位数字:

path('date_and_time/plus/<int:offset>/', hours_ahead),

我试过

path(r'^date_and_time/plus/\d{1,2}/$', hours_ahead),

但我收到了页面未找到(404)错误。

提前致谢!

1 个答案:

答案 0 :(得分:2)

Django 2.0+中的

path不接受正则表达式。您必须使用re_path

from django.urls import re_path

...

re_path(r'^date_and_time/plus/\d{1,2}/$', hours_ahead),

或者在您的视图中执行验证:

def hours_ahead(request, offset):
    try:
        offset = int(offset)
    except ValueError:
        raise Http404()

    if not 0 <= offset <= 99:
        raise Http404()

我不喜欢复杂的正则表达式,所以我会保留新式的路由格式并在视图中执行验证。