在Django中,反向参数永远不会被解释

时间:2015-03-25 13:03:36

标签: python django url parameter-passing reverse

在Django 1.6中,我有一个带有参数反向链接的视图:

edit_link = """<a href="%s"><img src="icon.gif"></a>""" % reverse('bio_filter', args={'ename':row.entity_name})

在我的urls.py文件中,与bio_filter视图关联的网址格式为:

url(
    regex=ur'^filter/(?P<ename>.*)/$',
    view=bio_filter_view,
    name='bio_filter',
),

最后,在bio_filter的views文件中,我有这个功能:

def bio_filter_view(request,ename):

问题是ename参数永远不会获得entity_name的值。如果我在函数中打印ename变量,则值实际上是&#39; ename&#39;! 我错过了什么?

此致 帕特里克

3 个答案:

答案 0 :(得分:1)

args需要列表或可迭代的位置参数。你应该使用的是kwargs,它是关键字参数的缩写,它需要一个命名参数的字典。

reverse('bio_filter', kwargs={'ename': row.entity_name})

您在网址中看到文字'ename'的原因是args接受任何可迭代。您可以遍历字典,但您实际上正在迭代其键。因此,将{'ename': row.entity_name}传递给args与将['ename']传递给args的效果相同!

答案 1 :(得分:1)

您应该使用kwargs参数而不是args

reverse('bio_filter', kwargs={'ename': row.entity_name})

另一种选择是使用正则表达式的位置组:

reverse('bio_filter', args=[row.entity_name])

答案 2 :(得分:1)

您可以在此处同时使用argskwargs

>>>reverse('bio_filter', kwargs={'ename': "entity_value"})
'/filter/entity_value'

OR

>>>reverse('bio_filter', args=["entity_value"])
'/filter/entity_value'