Ошибка URL отсутствует 1 обязательный позиционный аргумент: «смещение» при попытке доступа из браузера - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь следовать этим урокам: https://djangobook.com/django-views-dynamic-content/

Страница URL похожа на ниже

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/$', hello),
    url(r'^time/$', current_datetime),
    url(r'^time/plus/(\d{1,2})/$', hours_ahead),
]

А ассоциированное представление выглядит так:

def hours_ahead(request, offset):
    try:
        offset = int(offset)
    except ValueError:
        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)

Однако, когда я пытаюсь получить доступ к любому URL, как показано ниже, это выдает мне ошибку.http://127.0.0.1:8000/time/plus/5/

enter image description here

Я вижу следующую ошибку.Я не передаю смещение от URL браузера для просмотра.В консоли отображается следующая ошибка:

   response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: hours_ahead() missing 1 required positional argument: 'offset'
[01/Oct/2018 13:29:12] "GET /time/plus/3/ HTTP/1.1" 500 62628

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

После прочтения и изучения вышеизложенного я обнаружил, что путь более удобен для чтения и прост в использовании.Путь также более Python путь, который включен в Python 2.0 https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0

Для первого вопроса ответ проще:

path('time/plus/<int:offset1>/', hours_ahead),

Для второго ответа это:

path('welcome/<name>/', welcome_name),
0 голосов
/ 01 октября 2018

Вам нужно изменить urls.py.

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/$', hello),
    url(r'^time/$', current_datetime),
    url(r'^time/plus/(?P<offset>\d{1,2})/$', hours_ahead),
    ]
...