问题
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!
回答1:
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)
回答2:
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.
回答3:
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.
回答4:
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.
来源:https://stackoverflow.com/questions/1548709/better-to-save-a-slug-to-the-db-or-generate-dynamically