Django REST Framework URLs with Django 2.0
Asked Answered
D

2

9

I'm trying to set up Django REST Framework with Django 2.0 project which means url(r'^something/' ... has been replaced with path(something/ ....

I'm trying to work out how to set up my rest_framework patterns.

This is what I have:

router = routers.DefaultRouter()
router.register(r'regulations', api.RegulationViewSet)
router.register(r'languages', api.LanguageViewSet)


urlpatterns = [
    ...
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    ...
]

If I go to http://127.0.0.1:8000/regulations I simply get:

Page not found (404)

How should I set up my urlpatterns?

Darton answered 27/2, 2018 at 9:29 Comment(2)
url() has not been replaced. It is still valid. path() is an alternative. Note, however, you don't seem to have defined a URL for /regulations.Dehumidifier
@DanielRoseman But he has registered regulations with the router. He needs to implement it in the urlpatterns with include or by concatenating: urlpatterns += router.urls.Melda
A
15
urlpatterns = [
    ...
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    ...
]

with path('', include(router.urls)), you can get:

http://127.0.0.1:8000/regulations/
http://127.0.0.1:8000/languages/

with

path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),

you can get:

http://127.0.0.1:8000/api-auth/{other paths}
Armes answered 27/2, 2018 at 9:47 Comment(2)
This will result in http://localhost:8000/api-auth/regulations. Also rest_framework.urls is right too, but it is for the authentication routes provided by Django REST Framework. The routers.urls should be included under another path.Melda
Then you should remove the last sentence and add explanation.Melda
M
3

After registering the router you have to include it in the urlpatterns. The way how @Ykh suggested is technically correct, but with regards to content is missing the point.

urlpatterns = [
    # here you include your router
    path('', include(router.urls)),
    # here you include the authentication paths
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

Now you'll have the following routes:

http://localhost:8000/regulations/
http://localhost:8000/languages/

plus:

http://localhost:8000/api-auth/{other paths}
Melda answered 27/2, 2018 at 10:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.