Generate a slug in a Django Web Application

One of the most tedious aspects of writing a blog post is writing the slug. For these not in the know a slug is simply the url at which your article will be reacheable: so if you have a post with a title "Hello World" the slug would be yourdomain.com/hello-world.

I have around web development for a while so I do remember the time where slugs were not really popular. Back in the early days of the Internet you would simply see IDs like myblog.com/?article=123456. At some point search engines started to give more weight to more visually friendly and readable URLs and by then all the major blogs or online journals used a slug.

Django 3 offers now a slug field but you can also auto generate a slug if you used models.CharField for your slug.

Here is how, first your import slugify

 from django.utils.text import slugify 

then you modify your model as follow:

slug = models.CharField(max_length=155, null=True, blank=True)

and finally define a function to populate your slug field based on the title field (so if your title has spaces it will add the necessary - ) This example assume that your class is called Post:

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

This is all. Now adding a post in django admin will automatically add the slug based on the title.


made with ❤ī¸ by david.dev 2024 RSS Feed