我有点被抛出。我有以下代码,效果非常好:
urlresolvers.reverse('admin:cards_card_change', args=([92]))
为了进一步理解,我想尝试将该行重写为:
urlresolvers.reverse('admin:cards_card_change', kwargs={'object_id':92})
似乎由the documentation on reversing admin views建议(我正在使用Django 1.4)。
然而,这似乎与任何东西都没有匹配。为什么不?我尝试在django源代码中查找答案,但找不到用于更改的视图,因此链接到相关模块也会非常有用!
答案 0 :(得分:2)
更改视图的urlpattern
位于admin/options.py:
url(r'^(.+)/$',
wrap(self.change_view),
name='%s_%s_change' % info),
您可以发现它将请求分派给change_view
实例的ModelAdmin
方法。 change_view
方法也位于admin/options.py:
def change_view(self, request, object_id, form_url='', extra_context=None):
...
它接受参数object_id
。
reverse
匹配丢失的原因是上面的urlpattern
不接受命名参数,如果您将其更改为
url(r'^(?P<object_id>.+)/$',
wrap(self.change_view),
name='%s_%s_change' % info),
urlresolvers.reverse('admin:cards_card_change', kwargs={'object_id':92})
应该有用。
我不知道它是否打算避免一些边缘情况,或者它只是一个错误,并且已经有一张修复此问题的机票。我稍后会查看。
答案 1 :(得分:0)
我认为这是一个python语法问题。
问题是**kwargs
不能被视为*args
。
您尝试调用的函数具有第一个参数(object_id
),该参数是位置的,不能用作命名参数。 (有人告诉我,如果我错了)
对你来说,object_id
是一个位置参数,因此如果在kwargs中使用将被忽略
如果你希望你的视图函数也接受kwargs中的object_id,你必须改变它,例如
my_id = kwargs.get('object_id', args[0])