What is a Slug and How to Use It in Django Admin

Aug. 19, 2024, 9:47 p.m.

When developing web applications, creating user-friendly and SEO-friendly URLs is crucial. This is where slugs come into play. In Django, a slug is a simplified version of a string, typically used in URLs to represent readable and descriptive links. In this blog post, we’ll explore what slugs are, how to use them in Django models, and how to manage them effectively in Django Admin.

What is a Slug?

A slug is a URL-friendly string derived from a title or any text field, often used to create readable and SEO-friendly URLs. For example, a blog post titled "How to Use Slugs in Django Admin" might have a slug like how-to-use-slugs-in-django-admin. Slugs are typically lowercase and hyphen-separated, removing any spaces and special characters. In simple way slug will follow the name it has in the title field of the model in this case

Why Use Slugs?

  1. SEO Benefits: Search engines prefer clean URLs with relevant keywords. Slugs help improve your site's SEO.
  2. Readability: Clean URLs are easier for users to read and remember.
  3. Consistency: Slugs ensure consistent URL formats across your application

Lets jump into an example

To use slugs in Django, you need to define a SlugField in your model. Here’s an example using a BlogPost model:

from django.db import models
from django.utils.text import slugify

class BlogCategory(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class BlogPost(models.Model):
    category = models.ForeignKey(BlogCategory, related_name='posts', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200, unique=True)

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

    def __str__(self):
        return self.title

Explaination

  • SlugField: A SlugField is used to store the slug. It’s a specialized field in Django that ensures uniqueness and validity for URL-safe strings.
  • Slug Generation: In the save method, we use slugify to automatically generate a slug from the title. This ensures that the slug is created when the blog post is saved.

Registering the Model: Register your model with Django Admin:

from django.contrib import admin
from .models import BlogPost

class BlogPostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'category')
    prepopulated_fields = {"slug": ("title",)}

admin.site.register(BlogPost, BlogPostAdmin)

Prepopulate Slug Field: The prepopulated_fields attribute in ModelAdmin tells Django to automatically populate the slug field based on the title field.

Conclusion

Slugs are an essential part of creating clean, readable, and SEO-friendly URLs in Django applications. By defining a SlugField and utilizing Django Admin features, you can efficiently manage slugs and ensure they are automatically generated and unique.

Back