2

这是新闻页面上网址的最佳选择:

动态生成 slug。从对象 id 加载页面。如果 slug 不匹配,则永久重定向到正确的 slug。

myweb.com/542/my-news-item

我看到的缺点:如果新闻标题更改,则 slug 会更改,但旧 slug 将重定向到新的,所以我不知道这是否是查找问题。

或者:

即使新闻标题改变,也永远不会改变的静态段塞。

myweb.com/my-news-item

我看到的缺点:数据库上还有一个字段。如果我从根本上改变新闻标题,那么蛞蝓就会大不相同

4

2 回答 2

1

如果你想更新 slugs 而不破坏旧的 url,你可以分离 slugs 并链接列表视图中的最新内容,应该这样做:

class Article(models.Model):
    title = models.CharField() # etc

class ArticleSlug(models.Model):
    article = models.ForeignKey(Article)
    slug = models.SlugField(unique=True)
    date_created = models.DateTime(auto_now_add=True, editable=False)

    class Meta:
        get_latest_by = "date_created" 

在您的征募模板中,您可以简单地调用最新的 slug,但您可能还希望在 url 中有一些 M/Y/D 层次结构

<a href="/news/articles/{{ article.articleslug_set.latest }}/">{{ article.title }}</a>

如果您的网站获得大量流量,您可能需要添加一个 celery 任务来检索最新的 slug 并不时将其复制到文章模型上的字段中。这将为您节省一些 SQL JOIN。

于 2012-12-15T15:10:58.373 回答
0

How about a combination of using the redirects app and a post save signal like what this guy wrote.

于 2013-05-08T15:56:56.923 回答