mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-22 17:47:04 +03:00
Parametrizable viewset custom views reverse name (#4821)
This commit is contained in:
parent
8844082d0b
commit
635dc03529
|
@ -118,6 +118,26 @@ The above example would now generate the following URL pattern:
|
||||||
|
|
||||||
* URL pattern: `^users/{pk}/change-password/$` Name: `'user-change-password'`
|
* URL pattern: `^users/{pk}/change-password/$` Name: `'user-change-password'`
|
||||||
|
|
||||||
|
In the case you do not want to use the default name generated for your custom action, you can use the url_name parameter to customize it.
|
||||||
|
|
||||||
|
For example, if you want to change the name of our custom action to `'user-change-password'`, you could write:
|
||||||
|
|
||||||
|
from myapp.permissions import IsAdminOrIsSelf
|
||||||
|
from rest_framework.decorators import detail_route
|
||||||
|
|
||||||
|
class UserViewSet(ModelViewSet):
|
||||||
|
...
|
||||||
|
|
||||||
|
@detail_route(methods=['post'], permission_classes=[IsAdminOrIsSelf], url_name='change-password')
|
||||||
|
def set_password(self, request, pk=None):
|
||||||
|
...
|
||||||
|
|
||||||
|
The above example would now generate the following URL pattern:
|
||||||
|
|
||||||
|
* URL pattern: `^users/{pk}/set_password/$` Name: `'user-change-password'`
|
||||||
|
|
||||||
|
You can also use url_path and url_name parameters together to obtain extra control on URL generation for custom views.
|
||||||
|
|
||||||
For more information see the viewset documentation on [marking extra actions for routing][route-decorators].
|
For more information see the viewset documentation on [marking extra actions for routing][route-decorators].
|
||||||
|
|
||||||
# API Guide
|
# API Guide
|
||||||
|
|
|
@ -179,10 +179,11 @@ class SimpleRouter(BaseRouter):
|
||||||
initkwargs = route.initkwargs.copy()
|
initkwargs = route.initkwargs.copy()
|
||||||
initkwargs.update(method_kwargs)
|
initkwargs.update(method_kwargs)
|
||||||
url_path = initkwargs.pop("url_path", None) or methodname
|
url_path = initkwargs.pop("url_path", None) or methodname
|
||||||
|
url_name = initkwargs.pop("url_name", None) or url_path
|
||||||
ret.append(Route(
|
ret.append(Route(
|
||||||
url=replace_methodname(route.url, url_path),
|
url=replace_methodname(route.url, url_path),
|
||||||
mapping={httpmethod: methodname for httpmethod in httpmethods},
|
mapping={httpmethod: methodname for httpmethod in httpmethods},
|
||||||
name=replace_methodname(route.name, url_path),
|
name=replace_methodname(route.name, url_name),
|
||||||
initkwargs=initkwargs,
|
initkwargs=initkwargs,
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user