如何在Django中将带有pk的网址重定向到带有pk和slug的网址? [英] how to redirect a url with pk to url with pk and slug in django?

查看:61
本文介绍了如何在Django中将带有pk的网址重定向到带有pk和slug的网址?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当用户在下面输入此网址时

when a user enters this url below

www.example.com/1234

他必须重定向到

www.example.com/1234/this-is-your-first-post

例如,如果您试试这个:

For example, if you try this:

 http://stackoverflow.com/questions/15443306/

您将被重定向到

http://stackoverflow.com/questions/15443306/hover-menu-in-right-side-of-fixed-div

实际上,它不是重定向,它只是扩展 url slug字段自动。

Actually it is not a redirect, it is just extending the url with slug fieldautomatically.

我要实现此功能:
这是我的模型

I want to implement this feature: Here is my models

class Article(models.Model):
    title = models.CharField(max_length=20)
    body = models.TextField()
    # image = models.ImageField(upload_to="/", blank=True, null=True)
    date = models.DateField()
    likes = models.IntegerField()
    slug = models.SlugField()

    def save(self, *args, **kwargs):
        if not self.id:
            self.slug = slugify(self.title)
        super(Article, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('article_detail', kwargs={'slug':self.slug, 'pk':self.id})

    def __unicode__(self):
        return self.title

这是我的 urls.py 在我的应用内

urlpatterns = patterns('',
    url(r'all$', ArticleList.as_view(), name='blog_all'),
    url(r'^(?P<pk>\d+)/(?P<slug>[-\w\d]+)/$', ArticleDetail.as_view(), name='article_detail'),
    )


推荐答案

只需添加另一个收集信息并重定向的视图即可:

Just add another view that gathers the info and redirects:

class ArticleDetailRedirect(RedirectView):

    def get_redirect_url(self, pk):
        article = Article.objects.get(pk=pk)
        slug = article.slug
        return reverse('article_details', args=(pk, slug))

然后将其连接到您的 urls.py

urlpatterns = patterns('',
    url(r'all$', ArticleList.as_view(), name='blog_all'),
    url(r'^(?P<pk>\d+)/$', ArticleDetailRedirect.as_view(), name='article_redirect'),
    url(r'^(?P<pk>\d+)/(?P<slug>[-\w\d]+)/$', ArticleDetail.as_view(), name='article_detail'),
    )

这篇关于如何在Django中将带有pk的网址重定向到带有pk和slug的网址?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆