如何在urls.py中将id从url传递给post_save_redirect

时间:2009-01-23 19:42:19

标签: python django django-urls

我在数据库中有几个对象。使用通用视图编辑对象的URL看起来像site.com/cases/edit/123/,其中123是特定对象的id。考虑cases/url.py内容:

url(r'edit/(?P<object_id>\d{1,5})/$', update_object, { ... 'post_save_redirect': ???}, name = 'cases_edit'),

其中update_object是一般视图。如何构建post_save_redirect以指向site.com/cases/edit/123/。我的问题是,我不知道如何将对象的id传递给重定向函数。我试过像:

'post_save_redirect': 'edit/(?P<object_id>\d{1,5})/'
'post_save_redirect': 'edit/' + str(object_id) + '/'

但显然这些都不起作用。建议使用reverse函数,但如何传递特定的id

'post_save_redirect': reverse('cases_edit', kwargs = {'object_id': ???})
太阳穴中的

{% url %}也需要传递特定物体的idid可以通过extra_context传递:

extra_context = {'object_id': ???}

在所有情况下,问题是从网址获取object_id

问候
CHRISS

3 个答案:

答案 0 :(得分:1)

简而言之,您需要做的是包装update_object函数。

def update_object_wrapper(request, object_id, *args, **kwargs):
    redirect_to = reverse('your object edit url name', object_id)
    return update_object(request, object_id, post_save_redirect=redirect_to, *args, **kwargs)

答案 1 :(得分:0)

首先,阅读reverse函数。

其次,请阅读{% url %}代码。

您在视图中使用reverse函数来生成预期的重定向位置。

此外,您应该在模板中使用{% url %}标记。

答案 2 :(得分:0)

直接来自https://docs.djangoproject.com/en/dev/ref/generic-views/#django-views-generic-create-update-create-object

的文档

post_save_redirect可能包含字典字符串格式,它将根据对象的字段属性进行插值。例如,你可以使用post_save_redirect =“/ polls /%(slug)s /".