0
0
DjangoHow-ToBeginner · 3 min read

How to Use include in Django URLs for Modular Routing

In Django, use include() in your main urls.py to reference URL patterns from other apps or modules, helping keep your URL configuration clean and modular. It allows you to delegate URL routing to different files by importing their URL patterns.
📐

Syntax

The include() function is used inside the urlpatterns list in your Django urls.py file. It takes a string or a tuple pointing to another URL configuration module.

  • path('prefix/', include('app.urls')): Routes all URLs starting with prefix/ to the URL patterns defined in app/urls.py.
  • include('app.urls'): Imports URL patterns from the specified module.
python
from django.urls import path, include

urlpatterns = [
    path('blog/', include('blog.urls')),
]
💻

Example

This example shows a main urls.py that includes URL patterns from a blog app. The blog/urls.py defines its own routes, which are included under the blog/ path prefix.

python
# project/urls.py
from django.urls import path, include

urlpatterns = [
    path('blog/', include('blog.urls')),
]

# blog/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='blog-index'),
    path('post/<int:id>/', views.post_detail, name='post-detail'),
]

# blog/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse('Blog Home Page')

def post_detail(request, id):
    return HttpResponse(f'Post Detail for post {id}')
Output
Visiting /blog/ shows 'Blog Home Page'. Visiting /blog/post/5/ shows 'Post Detail for post 5'.
⚠️

Common Pitfalls

Common mistakes when using include():

  • Forgetting to add a trailing slash in the path() prefix, which can cause unexpected 404 errors.
  • Not importing include from django.urls.
  • Using include() with a view instead of a URLconf module.
  • Not defining urlpatterns in the included module.
python
from django.urls import path

# Wrong: Using include with a view
urlpatterns = [
    path('blog/', include(views.index)),  # This will cause an error
]

# Right: Using include with a URLconf module
from django.urls import include
urlpatterns = [
    path('blog/', include('blog.urls')),
]
📊

Quick Reference

Tips for using include() effectively:

  • Use include() to split URL patterns by app or feature for better organization.
  • Always import include from django.urls.
  • Ensure the included module has a urlpatterns list.
  • Use path prefixes to namespace URLs clearly.

Key Takeaways

Use include() to modularize URL routing by referencing other URLconf modules.
Always import include from django.urls and ensure included modules define urlpatterns.
Prefix included URLs with a path to namespace routes and avoid conflicts.
Avoid passing views directly to include(); it only accepts URLconf modules.
Check trailing slashes in paths to prevent 404 errors.