urls.py#

1. What is urls.py?#

urls.py defines how URLs are mapped to views in a Django project.

Location:

mysite/mysite/urls.py

It acts as the traffic controller of your web application.


2. What problem does urls.py solve?#

When a user visits a URL like:

http://127.0.0.1:8000/admin/
Django needs to know:
  • Which Python function should run?

  • Which page should be shown?

That mapping is done in urls.py.


Typical contents of urls.py

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

1️⃣ Import admin site#

from django.contrib import admin

Enables Django’s built-in admin interface.

2️⃣ Import path#

from django.urls import path

Used to define URL patterns.

3️⃣ URL patterns list#

urlpatterns = [
    path('admin/', admin.site.urls),
]
  • urlpatterns is required

  • Django scans this list from top to bottom

  • First match wins


How URL routing works (important)

Example:

path('myapp/', myapp_view)

If user visits:

/myapp/

Django calls:

myapp_view(request)


URL routing flow

Browser  urls.py  View  Response

urls.py decides which view handles the request.

Using apps inside urls.py

In real projects, you don’t put everything here.

Project-level urls.py

from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),
]

App-level urls.py (inside myapp/)

from django.urls import path
from .views import home

urlpatterns = [
    path('', home, name='home'),
]

This keeps URLs organized.


URL parameters example

path('post/<int:id>/', post_detail)

URL:

/post/5/

View receives:

def post_detail(request, id):
...

Why order matters

urlpatterns = [
    path('', home),
    path('admin/', admin.site.urls),
]

If ‘’ is first, it may catch everything.

Always put specific paths before general ones.


What urls.py is NOT

  • Not a view

  • Not HTML

  • Not database logic

  • Not middleware

It only handles URL → view mapping.


Common beginner mistakes
  • Forgetting urlpatterns

  • Misspelling view names

  • Not using include()

  • Putting business logic here