我正在关注Django documentation for django.shortcuts.redirect中的第一个例子。当我在对象上调用重定向时,它会重定向到URL
<bound method Event.get_absolute_url of <Event: Blah 2014>>
实际应该调用get_absolute_url方法并重定向到函数返回的URL。实际上调用myevent.get_absolute_url()会正确返回'/ 1 / right-slug',但重定向(应该只调用此函数)不能正常工作。
供参考,以下是模型,视图和URLConf的片段。
models.py:
class Event(models.Model):
name = models.CharField(max_length=255)
start_date = models.DateField()
@property
def slug(self):
return slugify(str(self))
def get_absolute_url(self):
return reverse('event-with-slug', kwargs={'event_id': self.id, 'slug': self.slug})
views.py:
def event_offers(request, event_id="1", slug=""):
event = get_object_or_404(Event, id=event_id)
if event.slug != slug:
return redirect(event, permanent=True)
urls.py:
url(r'^event/(?P<event_id>\d+)/$', view=views.event_offers, name='event-without-slug'),
url(r'^event/(?P<event_id>\d+)/(?P<slug>[-\w\d]+)/$', view=views.event_offers,
name='event-with-slug'),
请求:www.example.com/1/wrong-slug
预计重定向到:wwww.example.com/1/right-slug
实际重定向至:www.example.com/1/wrong-slug/>