Question

I am working on a django project and would like to include a slug at the end of the url, as is done here on stackoverflow.com: http://example.com/object/1/my-slug-generated-from-my-title

The object ID will be used to look up the item, not the slug -- and, like stackoverflow.com, the slug won't matter at all when getting the link (just in displaying it).

Qestion: is there a downside (or upside) to generating the slug dynamically, rather than saving it as an actual database field ?

For example (not real code):

class Widget(models.Model):
    title = models.CharField()

    def _slug(self):
      return slugify(self.title)
    slug = property(_slug)

Rather than using an something like an AutoSlugField (for example) ?

Since my plan is to have it match the title, I didn't know if it made sense to have a duplicate field in the database.

Thanks!

Was it helpful?

Solution

If you're using the slug for decorative (rather than lookup) purposes, generating it dynamically is the best idea.

Additionally, the code sample you posted can be written like this:

@property
def slug(self):
  return slugify(self.title)

OTHER TIPS

Try making a slug out of the word "café" or "浦安鉄筋家族".

Chances are that it'll look like poo, unless you're really well-prepared.

Sometimes you need the ability to customize slugs.

The downside would be that you're automatically generating the slug every time you render the page. The upside is that you're not taking up space in the database with a field that will never be directly queried against.

Either way is fine, it just depends on your performance vs. space requirements.

The main downside of generating slugs dynamically is that you miss the ability to customize slugs per-object, eg. make them shorter and prettier. For English titles this can be OK, but for non-English content generated slugs can be ugly.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top