2009-10-10 43 views
5

我工作的一个Django项目,并希望包括在URL的最后一塞,因为都是在这里完成的stackoverflow.com:http://example.com/object/1/my-slug-generated-from-my-title更好地保存到数据库或生成动态?

的对象ID将被用于查找的项目,不slu - - 和stackoverflow.com一样,当获得链接时(显示它),slu will并不重要。

问题:是否存在一个动态生成slug的下行(或上行),而不是将其保存为实际的数据库字段?

例如(不真正代码):

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

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

而不是使用一个类似的AutoSlugField(for example)?

由于我的计划是让它与标题相匹配,所以我不知道在数据库中是否有重复的字段是有意义的。

谢谢!

回答

8

如果你使用装饰(而不是查找)的目的,为动态生成它是最好的主意。

此外,您发布的代码示例可以这样写:

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

感谢您的提示 - 一直看起来更好!欣赏它。 – thornomad

1

的缺点是,你自动生成每次呈现页面时蛞蝓。好处在于,您不会占用数据库中的空间,并且永远不会直接查询该字段。

无论哪种方式都很好,它只取决于你的性能与空间要求。

+0

是的 - 那些是我的想法。我不知道这些方法中的一个是_preferred_ ...也许它取决于服务器。 – thornomad

+0

两者都可以忽略不计。 1百万个子弹,每个50字节将是50MB。计算它也是微不足道的。 – Medorator

0

动态生成slu main的主要缺点是您错过了定制每个对象slu ability的能力,例如。使他们更短,更漂亮。对于英文标题,这可以是好的,但对于非英文内容,生成的slu can可能会很难看。

2

尝试用“café”或“浦安鉄筋家族”这个词做出一个slu Try子弹。

有可能是它看起来像poo,除非你真的做好了充分的准备。

有时你需要定制slu ability的能力。

+0

+1,有趣。我认为你建议它应该被存储(因为它可能已被定制)。 – Edmund

+0

对不起,是的,这就是我的建议。我不是很清楚是我:) –

+0

你会手动塞住异常值吗?在许多设计中无法手动执行此操作。但是,如果您是基于某些规则来定制slug,则可以编写这些规则以动态生成它们。我错过了什么吗? – Medorator

相关问题