如果id更改,则更改url标题

2024-09-28 01:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有

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

但是现在,如果我在地址栏内的url中将id 1改为2,然后按回车键,例如/sometitle_and_and_blabla/1/

我会得到另一个消息,但标题没有改变,它只会变成这样:

/sometitle_and_and_blabla/2/

如果id发生变化,我如何更改标题?你知道吗

那个网址.py看起来像这样:

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

Tags: orandidurl标题getobjectrequest
2条回答

当您使用命名URL(例如newsprofile)时,我推荐以下解决方案。这是灵活和易于维护的,即使您的url发生变化,只要您使用相同的url参数:

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以获取URL的反向解析。你知道吗

像这样试试

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))

   .....

相关问题 更多 >

    热门问题