Django
Beginner
1 min read
Custom Path Converters and URL Best Practices
Example
# blog/converters.py — custom path converter
class FourDigitYearConverter:
regex = '[0-9]{4}'
def to_python(self, value):
return int(value)
def to_url(self, value):
return f'{value:04d}'
# blog/urls.py — register and use custom converter
from django.urls import path, register_converter
from . import converters, views
register_converter(converters.FourDigitYearConverter, 'yyyy')
urlpatterns = [
path('archive/<yyyy:year>/', views.PostYearArchiveView.as_view(), name='post-year'),
]
# Slug-based URLs instead of IDs
# blog/models.py
from django.db import models
from django.utils.text import slugify
class Post(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=200, unique=True, blank=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super().save(*args, **kwargs)
def get_absolute_url(self):
from django.urls import reverse
return reverse('blog:post-detail', kwargs={'slug': self.slug})
# blog/urls.py with slug
urlpatterns = [
path('<slug:slug>/', views.PostDetailView.as_view(), name='post-detail'),
]
Related Resources
Django Reference
Complete tag & property list
Django How-To Guides
Step-by-step practical guides
Django Exercises
Practice what you've learned
More in Django