如果id改变,则更改网址标题 - django

时间:2014-09-03 14:47:40

标签: python django

我有

def newsprofile(request, newstitle, newsid):
   newsobj = get_object_or_404(NewsModel, pk=int(newsid))
   return render(request, 'newsprofile.html', {'newsobj': newsobj})

但是现在,如果我在地址栏内的网址中将ID 1更改为2并点击输入按钮,例如/sometitle_and_and_blabla/1/

我会得到另一条新闻,但标题不会改变,只会变成:

/sometitle_and_and_blabla/2/

如果ID更改,我该如何更改标题?

urls.py看起来像这样:

url(r'^news/(?P<newstitle>[^\/]*)/(?P<newsid>\d+)/$', 'newsprofile', name='newsprofile'),

2 个答案:

答案 0 :(得分:3)

试试这个,

def newsprofile(request, newstitle, newsid):
   newsobj = get_object_or_404(NewsModel, pk=int(newsid))
   if newstitle != newsobj.newstitle:
       return HttpResponsePermanentRedirect('/%s/%s/' % (newsobj.newstitle, newsid))

   .....

答案 1 :(得分:1)

当您使用命名网址(例如newsprofile)时,我建议使用以下解决方案。这是灵活且易于维护的,即使您的网址在使用相同的网址参数时也会发生变化:

from django.http import HttpResponseRedirect
...

def newsprofile(request, newstitle, newsid):
    newsobj = get_object_or_404(NewsModel, pk=int(newsid))

    if newsobj.newstitle != newstitle:
        return HttpResponseRedirect(reverse("newsprofile", args=[newstitle, newsid]))

    return render(request, 'newsprofile.html', {'newsobj': newsobj})

有关网址的反向解析,请参阅Django docs here