2011-06-07 144 views
1

我是Django的新手,已经开始研究成熟的Django项目。Django NoReverseMatch错误

我想为用户帐户屏幕添加一个新页面,并链接到它。但是我得到一个NoReverseMatch错误。

要/users/urls.py我说:

url(r'^panel/history$', 
    'theproject.users.views.history', 
    name='account_history' 
), 

...这是与它上面的线是一致的:

url(r'^panel$', 
    'theproject.users.views.control_panel', 
    name='account_panel' 
), 

要/users/views.py我说:

@login_required 
def history(request): 
    return render_to_response('users/ourbrand_history.html', {}, 
    context_instance=RequestContext(request)) 

...这是与它上面的线是一致的:

@login_required 
def control_panel(request): 
    return render_to_response('users/ourbrand_panel.html', {}, 
    context_instance=RequestContext(request)) 

要/templates/users/ourbrand_panel.html我加入:

<a href="{% url account_history %}">History</a> 

...这与它上面的线是一致的:

<a href="{% url account_panel %}">Home</a> 

现在,当我加载/面板I得到一个TemplateSyntaxError:NoReverseMatch。

Reverse for 'account_history' with arguments '()' and keyword arguments '{}' not found. 

更新:作为一个测试,我删除了我的链接在模板 - 和/面板加载罚款。如果我然后删除/users/urls.py和/users/views.py /面板仍然加载。我删除了所有的cookies,历史记录等。我是否需要在终端上运行一个命令(比如ruby中的rake)来提交对urls.py的更改?或者应该改变'正常工作'?

+0

据我所知,一切都看起来是正确的(尽管后面的斜杠是一个好主意,正如@pastylegs所说)。有没有可能是你没有剪切/粘贴,在另一行中可能会影响它的一些小的语法错误?也许是一个额外的引用“或改变模板读取方式的东西? – 2011-06-07 19:03:19

+0

(尽管我认为你剪切/粘贴代码,显示的内容是正确的) - 你可以仔细检查你是否在所有地方一直使用下划线'_',没有意外地使用连字符'-' :)我只是测试我的命名的URL,切换我用于下划线(工作)的连字符,但是当我混合它们时,它会产生相同的错误 – 2011-06-07 19:12:17

+0

如果您正在运行Django开发服务器的所有文件更改都会导致服务器重新加载文件,因此您不必提交任何内容。但是,在模板中 - 如果变量不存在,它只是计算为空字符串,它不会't给你任何错误,所以页面将加载正常 – 2011-06-07 19:16:00

回答

1

回答我的问题的视图链接(基于帮助提供here)...

由于服务器是生产,在服务器重新启动之前,对urls.py的更改不起任何作用。目前我没有su访问权限,所以不能apachectl restart,但看来这将解决问题。

+0

它确实解决了这个问题:'apache2ctl restart' – ram1 2011-06-21 17:16:10

2

尝试:

{% url users.views.control_panel %} 
{% url users.views.history %} 
模板和变化

url(r'^panel/history/$','theproject.users.views.history',name='account_history'), 
url(r'^panel/$','theproject.users.views.control_panel',name='account_panel'), 

     ^
在网址

。 (请注意在第一个参数后斜线。)

1

移动这样的:

url(r'^panel/history/$', 
    'theproject.users.views.history', 
    name='account_history' 
), 

users/urls.py到项目层面urls.py

这可能是因为users/urls.py不会从主urls.py也定义了/panel/

+0

如果是这样,那么他最好在主'urls.py'中做一个'include('users.urls')',并将URL保存在'users/urls.py'中,而不是移动URL 。 – 2011-06-07 19:19:59

+0

我试过了,但仍然出现'NoReverseMatch'错误。至于'/ users/urls.py'是否从主'urls.py'被调用,我相信它是:'urlpatterns = patterns('',(r'^ accounts /',include('theproject.users .urls')))' – ram1 2011-06-07 19:23:28

2

如果您使用mod_wsgi的,然后进行简单:

$ touch /path/to/your/wsgi_file.wsgi 

应该做的伎俩(无需重新启动服务器)。