在Django中使用装饰程序时呈现模板时出现问题

在Django中使用装饰程序时呈现模板时出现问题,django,decorator,Django,Decorator,我的项目中有此URL: url(r'^alerts/inbox/$', 'inbox', {'template_name': 'inbox.xhtml' }, name = 'inbox'), 收件箱视图正是这样的: @login_required() @ownsBid def inbox(request, template_name): return render_to_response(template_name, context_instance=RequestContext(r

我的项目中有此URL:

url(r'^alerts/inbox/$', 'inbox', {'template_name': 'inbox.xhtml' }, name = 'inbox'),
收件箱视图正是这样的:

@login_required()
@ownsBid
def inbox(request, template_name):
    return render_to_response(template_name, context_instance=RequestContext(request))
我自己的SBID装饰师是:

def ownsBid(fn):
    def _check(request, *args, **kwargs):
        return fn(request, kwargs)

    return _check
当我使用:

fn(request, kwargs) 
我在/alerts/inbox/上找到了一个TemplateDoesNotExist。如果我这样做:

fn(request, kwargs['template_name'])
它可以毫无问题地呈现模板。我不知道为什么会这样。但是如果我必须向视图传递一个特定的参数,它完全打破了装饰器的枯燥原理。

你能试试
fn(request,**kwargs)
吗?下面是一个快速说明:

>>> def foo(template_name):
 print template_name

>>> d = dict(template_name =  'foo/bar.html')
>>> foo(d)
{'template_name': 'foo/bar.html'}
>>> foo(**d)
foo/bar.html
>>> 
那么这里发生了什么?在第一种情况下(
foo(d)
),您将字典原样传递给函数。自然地,
template\u name
的值就是dictionary对象


在第二种情况下(
foo(**d)
),您正在扩展字典并将键和值作为关键字参数传递。
template\u name
键将成为关键字参数,
foo/bar.html
将成为其值。

谢谢你的回答,我错过了星号,甚至没有注意到。