Django:重定向到对象生成奇怪的URL

时间:2014-03-18 21:43:19

标签: python django url redirect shortcuts

我正在关注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/>

0 个答案:

没有答案