【问题标题】:how to pass id from url to post_save_redirect in urls.py如何将 id 从 url 传递到 urls.py 中的 post_save_redirect
【发布时间】:2010-10-03 05:14:03
【问题描述】:

我在数据库中有几个对象。使用通用视图编辑对象的 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': ???}

在所有情况下,问题都是从 url 获取object_id

问候
克里斯

【问题讨论】:

  • 您确实没有提供足够的信息。请详细说明。

标签: python django django-urls


【解决方案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)

【讨论】:

    【解决方案2】:

    首先,阅读reverse 函数。

    其次,阅读{%url%}标签。

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

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

    【讨论】:

      【解决方案3】:

      来自文档: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/"。

      【讨论】:

        猜你喜欢
        • 2014-07-25
        • 2012-04-10
        • 2020-06-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-17
        • 1970-01-01
        • 2016-08-08
        • 1970-01-01
        相关资源
        最近更新 更多