Urls NoReverseMatch:没有尝试过模式

时间:2015-03-13 16:06:06

标签: django django-urls

我试图在方法结束时返回一个网址:

return reverse('list-remote-networks', kwargs={'datacenter_id': datacenter_id})`

在我的urls.py中,这些行与这个网址有关:

DATACENTER = r'^(?P<datacenter_id>[^/]+)/%s$'
urlpatterns = patterns('',
...
url(DATACENTER % 'list-remote-networks', views.NetworkView.as_view(), name='list-remote-networks'),

我错过了什么吗?我的其他网址效果很好。
编辑:这是urls.py文件。

`DATACENTER = r'^(?P<datacenter_id>[^/]+)/%s$'
NETWORK = r'^(?P<remote_network_id>[^/]+)/%s$'
urlpatterns = patterns('',
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(DATACENTER % 'remotelogin', views.remotelogin, name='remotelogin'),
    url(DATACENTER % 'list-remote-networks', views.NetworkView.as_view(), name='list-remote-networks'),
    url(r'^(?P<datacenter_id>[^/]+)/(?P<remote_tenant_id>[^/]+)/(?P<remote_network_id>[^/]+)/%s$' % 'connectnetworks', views.ConnectNetworkView.as_view(), name='connectnetworks'),

 )`

2 个答案:

答案 0 :(得分:0)

以下是测试正则表达式的方法:

>>> import re
>>> match_string = re.match(r'^(?P<datacenter_id>[^/]+)/%s$' % 'list-remote-networks', 'abc/list-remote-networks')
>>> match_string.groupdict()
{'datacenter_id': 'abc'}
>>> match_nums = re.match(r'^(?P<datacenter_id>[^/]+)/%s$' % 'list-remote-networks', '123/list-remote-networks')
>>> match_nums.groupdict()
{'datacenter_id': '123'}
>>> match_special_chars = re.match(r'^(?P<datacenter_id>[^/]+)/%s$' % 'list-remote-networks', '123-abc?_+@#/list-remote-networks')
>>> match_special_chars.groupdict()
{'datacenter_id': '123-abc?_+@#'}

我不认为这里的问题是你的正则表达式。我怀疑是发生了以下事情之一:

  1. 您将此添加到您的urls.py文件中,而不重新加载Django; Django没有接受它。杀死并重新启动Django是检查此问题的简便方法。
  2. 此文件未按您认为是由父urls.py文件加载。我假设这不是根路径,因为你带有id。此url文件的include条目可能会丢失,或者可能存在未正确引用的名称空间。如果你使用命名空间,反过来会这样:
  3. reverse('namespace-name:list-remote-networks', kwargs={'datacenter_id': datacenter_id})

答案 1 :(得分:0)

我找到了解决方案。

return HttpResponseRedirect(reverse('horizon:project:remote_data_centers:list-remote-networks',
                                            kwargs={'datacenter_id': datacenter_id}))

但现在我还有另外一个问题。在返回指令之前,我在会话中保存变量:

request.session['remote_dc_id'] = datacenter_id

在我的重定向之后,在我的views.NetworkView.as_view()中我试图在之前保存我的值:

class NetworkView(tables.DataTableView):  
table_class = NetworksDCTable  
template_name = 'project/remote_data_centers/networks.html'  
def get_data(self):  
    remote_dc_id = self.request.session['remote_dc_id']

但我无法获得我的价值。返回此错误:

Exception Type: KeyError
Exception Value:    
'remote_dc_id'