TypeError: loadshortlink () получил несколько значений для аргумента 'shortlink' - PullRequest
0 голосов
/ 03 сентября 2018

Ошибка: TypeError: loadshortlink () получил несколько значений для аргумента shortlink

Мои urls.py:

path('s/<str:shortlink>',views.loadshortlink, name="get_longlink")

views.py:

def loadshortlink(shortlink):
    print("Translating short link %s" % shortlink)
    link = get_longlink(shortlink)
    return render(request, 'shortlinks/openlong.html', {
        'link': link

    })

def get_longlink(shortlink):
    print('Short link is %s' % shortlink)
    links = Links.objects.filter(shortlink=shortlink)
    if len(links)>1 or len(links)==1:
        link = links[0].longlink
        return link
    else:
        return 'No matched long links'

Когда я посещаю URL: http://127.0.0.1:8000/s/4nI

Я получаю ошибку:

Internal Server Error: /s/4nI
Traceback (most recent call last):
File "/home/joel/.local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
File "/home/joel/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
File "/home/joel/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: loadshortlink() got multiple values for argument 'shortlink'

Почему это происходит?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

На самом деле, он не может обработать запрос, потому что в методе loadshortlink отсутствует параметр запроса. Ваш код должен быть:

def loadshortlink(request, shortlink):
    print("Translating short link %s" % shortlink)
    link = get_longlink(shortlink)
    return render(request, 'shortlinks/openlong.html', {
        'link': link

    })

def get_longlink(shortlink):
    print('Short link is %s' % shortlink)
    links = Links.objects.filter(shortlink=shortlink)
    if len(links)>1 or len(links)==1:
        link = links[0].longlink
        return link
    else:
        return 'No matched long links'
0 голосов
/ 03 сентября 2018

Первый аргумент функции представления должен быть запросом. Вам нужно добавить его в loadshortlink:

def loadshortlink(request, shortlink):
    print("Translating short link %s" % shortlink)
    link = get_longlink(shortlink)
    return render(request, 'shortlinks/openlong.html', {
        'link': link

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