Better to save a slug to the DB or generate dynamically?

非 Y 不嫁゛ 提交于 2019-12-06 03:33:17

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!