在 Django 中反向参数永远不会被解释
in Django parameter in reverse never gets interpreted
在 Django 1.6 中,我有一个带有 link 的视图,它与参数相反:
edit_link = """<a href="%s"><img src="icon.gif"></a>""" % reverse('bio_filter', args={'ename':row.entity_name})
在我的 urls.py 文件中,与 bio_filter 视图关联的 url 的模式是:
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 变量,值就是 'ename'!
我错过了什么?
此致,
帕特里克
args
需要一个列表或可迭代的位置参数。你应该使用的是 kwargs
,关键字参数的缩写,它需要一个命名参数的字典。
reverse('bio_filter', kwargs={'ename': row.entity_name})
您在 url 中看到文字 'ename'
的原因是 args
接受任何可迭代对象。您可以 遍历字典,但您实际上是在遍历它的键。因此,将 {'ename': row.entity_name}
传递给 args
与将 ['ename']
传递给 args
具有相同的效果!
您应该使用 kwargs
参数而不是 args
:
reverse('bio_filter', kwargs={'ename': row.entity_name})
另一种选择是使用正则表达式的位置组:
reverse('bio_filter', args=[row.entity_name])
您可以在此处同时使用 args
和 kwargs
。
>>>reverse('bio_filter', kwargs={'ename': "entity_value"})
'/filter/entity_value'
或
>>>reverse('bio_filter', args=["entity_value"])
'/filter/entity_value'
在 Django 1.6 中,我有一个带有 link 的视图,它与参数相反:
edit_link = """<a href="%s"><img src="icon.gif"></a>""" % reverse('bio_filter', args={'ename':row.entity_name})
在我的 urls.py 文件中,与 bio_filter 视图关联的 url 的模式是:
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 变量,值就是 'ename'! 我错过了什么?
此致, 帕特里克
args
需要一个列表或可迭代的位置参数。你应该使用的是 kwargs
,关键字参数的缩写,它需要一个命名参数的字典。
reverse('bio_filter', kwargs={'ename': row.entity_name})
您在 url 中看到文字 'ename'
的原因是 args
接受任何可迭代对象。您可以 遍历字典,但您实际上是在遍历它的键。因此,将 {'ename': row.entity_name}
传递给 args
与将 ['ename']
传递给 args
具有相同的效果!
您应该使用 kwargs
参数而不是 args
:
reverse('bio_filter', kwargs={'ename': row.entity_name})
另一种选择是使用正则表达式的位置组:
reverse('bio_filter', args=[row.entity_name])
您可以在此处同时使用 args
和 kwargs
。
>>>reverse('bio_filter', kwargs={'ename': "entity_value"})
'/filter/entity_value'
或
>>>reverse('bio_filter', args=["entity_value"])
'/filter/entity_value'