我使用这段代码https://github.com/kylebragger/tiny/blob/master/tiny.py将整数主键转换为缩短的URL。
例如,对于文章id 1000,可以将url转换为/articles/a1b2c3/title- of -article,而不是使用url /articles/1000/title-of-article。
这样做的问题是,我的模型和视图中到处都是对缩短和取消缩短这些主键的函数的调用。它们出现在使用主键的每个视图中,以及模型中返回固定链接的方法中,比如get_absolute_url()。
这似乎是不必要的重复。我想知道是否有一种更好的方法来实现这一点,而不用到处调用这些函数--可能是通过修改URL分派器及其反向函数,以便在生成或解析URL时遇到指定的URL参数时自动调用指定的回调函数,并让该回调执行转换。
发布于 2011-06-03 17:03:13
如果您将缩短的url作为排序的slug field存储在数据库中,那么您可以像使用任何其他slug字段一样使用它,并直接对其进行过滤,而不必对其进行转换。
或者:您可以考虑为使用此技术的任何模型编写一个自定义管理器,它允许您通过为表提供一个缩短的url来搜索表中的记录。就像这样:
MyModel.objects.get_by_short_url('myshorturl')
它可以实现为:
class MyManager(models.Manager):
...
def get_by_short_url(self, s):
return self.get(from_tiny(s))
这与您现有的使用模型的get_absolute_url方法的想法相结合,意味着应该完全抽象出缩短算法。这使得它与使用任何实数字段来标识模型实例没有什么不同,比如主键本身或(最好)专用的slug字段。
https://stackoverflow.com/questions/6230174
复制相似问题