Я использую параметризованный URL в API, основанном на Django Rest Framework. Я не могу передать параметр url в представление на основе классов, указанное этим URL.
Я использую ** kwargs в определении функции представления для передачи переменной url, но получаю сообщение об ошибке при вызове url.
шаблон URL похож на ниже-
url(r'product/(?P<id>\d+)/details/$', APIProductDetails.as_view())
вид выглядит как ниже-
class APIProductDetails(CustomAPI):
permission_classes = (CustomAuthentication,)
def get(self, request, **kwargs):
id = kwargs.get('id',None)
return Response(data={}, status=200)
def post(self, request, **kwargs):
return Response(data={}, status=200)
При тестировании URL с помощью pytest я получаю сообщение об ошибке ниже -
TypeError: 'id' является недопустимым аргументом ключевого слова для этой функции
мой код pytest похож на ниже-
response = client.get(
"/api/v1/rm/product/1/details/"
)
assert response.status_code == 200
Другие API, которые не содержат параметров, работают нормально. Чего мне не хватает?
edit: Предоставление более подробной информации в соответствии с комментариями Alasdair
Как указано в комментарии, запрос обрабатывался CustomAPI.
class CustomAPI(APIView):
_url = None
def initial(self, request, *args, **kwargs):
logger.info("Request: %s, Args: %s, Kwargs: %s" % (request.__dict__, str(*args), str(**kwargs)))
CustomAPI._url = request.get_full_path()
super(CustomAPI, self).initial(request, *args, **kwargs)
Ошибка в строке
Файл "путь / к / app / api_common.py", строка 55, в начальной
logger.info («Запрос:% s, Аргументы:% s, Kwargs:% s»% (запрос. dict , str (* args), str (** kwargs)))
Ошибка типа: 'id' является недопустимым аргументом ключевого слова для этой функции
что-то не так с str (** kwargs)?