我正在使用Django基于类的DetailView通用视图来查找要显示的对象.在某些情况下,我希望退出并发出HTTP重定向,而不是显示对象.我看不出我是怎么做的.它适用于用户点击我的应用中的对象但不使用规范网址的情况.因此,例如,在StackOverflow URL上采用以下形式:
http://stackoverflow.com/<content_type>/<pk>/<seo_friendly_slug>
Run Code Online (Sandbox Code Playgroud)
例如:
http://stackoverflow.com/questions/5661806/django-debug-toolbar-with-django-cms-and-django-1-3
Run Code Online (Sandbox Code Playgroud)
您实际上可以键入任何内容作为seo_friendly_slug部分,它会将您重定向到通过PK查找的对象的正确规范URL.
我希望在我的DetailView中也这样做.检索对象,检查它是否是规范URL,如果没有,则重定向到项目的get_absolute_url URL.
我无法在get_object中返回HttpResponseRedirect,因为它期望查找对象.我似乎无法从get_context_data返回它,因为它只是期望上下文数据.
也许我只需要写一个手动视图,但我想知道是否有人知道它是否可能?
谢谢!
卢多.
slug是描述或标题页面的URL的一部分,并且通常是关键字丰富的页面改进SEO.例如,在这个URL中PHP/JS - 动态创建缩略图或存储为最后一节"php-js-create-thumbnails-on-the-fly-or-store-as-files"的文件是slug.
目前,我正在为每个页面存储slug,并在DB中记录页面的记录.当页面生成并与页面一起存储时,从标题字段生成slug.但是,我正在考虑动态生成slug,以防我想要改变它.我正在努力找出哪个更好,哪些更好.
到目前为止,我已经为每个人提出了这些专业要点:
Store slug: - "Faster"处理器每次都不需要生成它(生成一次)
生成即时: - 灵活(可以调整slug算法,不需要为整个表重新生成). - 在数据库中占用更少的空间 - 从数据库传输到应用程序的数据更少
还有什么我错过了,你会怎么做?
编辑:
我想澄清一下在答案中看起来像是一种误解.slu to对登陆正确页面没有影响.要理解这一点,只需切断或破坏本网站上任何部分的slu .. 例如:
都将带你到同一页.slu from永远不会被编入索引.
你不需要保存旧的slu .. 如果你登陆了一个有"旧slu"的页面,那么你可以检测到这一点,然后只需301重定向到正确的"slu"".在上面的例子中,如果Stack Overflow实现了它,那么当你登陆任何带有截断slug的链接时,它会将url中的slug与当前slug算法生成的slug进行比较,如果不同,它会执行301重定向到同一页面,但使用新的slug.
请记住,所有内部生成的链接将立即使用新算法,并且只有来自外部指向的链接才会使用旧的slug.