What is a “slug” in Django?

In Django, a “slug” is a short label used to identify a model instance in a URL-friendly manner. It’s often used to create human-readable URLs for objects, especially when those objects have a title or name. Slugs typically contain only lowercase letters, numbers, hyphens, and underscores.

Here’s an example of how to use a slug field in a Django model:

Example Scenario: Let’s say you have a model called Article with a title, and you want to generate a slug for each article based on its title.

Step 1: Import Required Modules: In your models.py file, import the necessary modules:

from django.db import models
from django.utils.text import slugify # To create slugs from text

Step 2: Define the Model with Slug Field: Define your model and include a SlugField to store the slug:

class Article(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True) # Slug field

def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title) # Generate slug from title
super().save(*args, **kwargs)

def __str__(self):
return self.title

In this example, the SlugField is used to store the slug. The save method is overridden to automatically generate the slug from the title if it’s not provided. The slugify function is used to convert the title into a slug-friendly format.

Step 3: Use the Model: Once you’ve defined the model, you can create instances of the Article model and access the slug field:

article = Article(title='Django Slug Example')

print(article.title) # Output: Django Slug Example
print(article.slug) # Output: django-slug-example

Step 4: Include the Slug in URLs: In your urls.py file, you can include the slug as part of the URL patterns:

from django.urls import path
from .views import ArticleDetailView

urlpatterns = [
path('<slug:slug>/', ArticleDetailView.as_view(), name='article_detail'),
# ...

Here, the slug is captured from the URL and passed to the ArticleDetailView to fetch the corresponding article.

Using slugs in Django allows you to create user-friendly and SEO-friendly URLs that are easy to understand and share.