在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;! 我错过了什么?
此致 帕特里克
答案 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)
您可以在此处同时使用args
和kwargs
。
>>>reverse('bio_filter', kwargs={'ename': "entity_value"})
'/filter/entity_value'
OR
>>>reverse('bio_filter', args=["entity_value"])
'/filter/entity_value'