8️⃣Django Slug Field & Bootstrap 5
Estimated reading: 3 minutes 43 views

🔗 Django Add Slug Field – Create SEO-Friendly URLs in Your Models (2025 Guide)

🧲 Introduction – What Is a Slug in Django?

A slug is a short, URL-friendly version of a string—commonly used for blog titles, product names, or category pages. In Django, you can add a SlugField to your model to create clean, readable, and SEO-optimized URLs like:

https://example.com/blog/django-template-syntax/

🎯 In this guide, you’ll learn:

  • How to add a SlugField to your model
  • How to auto-generate slugs from titles
  • How to use slugs in URLs and views
  • Best practices for uniqueness and SEO

🧱 Step 1: Add a Slug Field to Your Model

models.py

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

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    slug = models.SlugField(unique=True, blank=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

slugify() automatically converts “My First Post” ➝ my-first-post.


🔄 Step 2: Make Migrations

python manage.py makemigrations
python manage.py migrate

🌐 Step 3: Use the Slug in URLs

urls.py

from django.urls import path
from . import views

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

🧩 Step 4: Update the View to Use Slug

views.py

from django.shortcuts import get_object_or_404, render
from .models import Post

def post_detail(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render(request, 'blog/post_detail.html', {'post': post})

✅ Now, posts can be accessed via their slug:

/post/django-template-tags/

🖥️ Optional: Display Slug in Admin (Read-Only)

admin.py

from django.contrib import admin
from .models import Post

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

admin.site.register(Post, PostAdmin)

✅ Best Practices

  • ✅ Set unique=True to prevent slug conflicts
  • ✅ Use slugify() to auto-generate slugs safely
  • ✅ Always check if the slug already exists before saving
  • ✅ Use slugs for readability and SEO benefit

📌 Summary – Recap & Next Steps

🔍 Key Takeaways:

  • Slugs make URLs clean, readable, and SEO-friendly
  • Use SlugField with slugify() for auto-generation
  • Use slugs in your URL patterns and views instead of IDs
  • Update your admin and detail pages to support slugs

⚙️ Real-World Relevance:
Slugs are critical for blogs, news sites, product pages, and SEO-focused websites—offering both user-friendly and search engine-friendly links.


❓ Frequently Asked Questions (FAQ)

❓ What if two posts have the same title?

✅ Use a custom function to append a number or timestamp if the slug exists:

from django.utils.text import slugify
def unique_slug(instance, title):
    base_slug = slugify(title)
    slug = base_slug
    num = 1
    while Post.objects.filter(slug=slug).exists():
        slug = f"{base_slug}-{num}"
        num += 1
    return slug

❓ Can I manually set the slug?

✅ Yes. Just fill it in the admin or form. If blank, it auto-generates.


❓ Can I use slugs with other models?

✅ Yes. Slugs work with any model—categories, authors, tags, etc.


❓ Is the slug field case-sensitive?

🚫 No. It’s treated as case-insensitive in most database backends.


❓ Should I make the slug field editable?

🟡 Only if you want manual control. Otherwise, keep editable=False.


Share Now :

Leave a Reply

Your email address will not be published. Required fields are marked *

Share

Django Add Slug Field

Or Copy Link

CONTENTS
Scroll to Top