我有
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'),
答案 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。