我是Django的新手,已经开始研究成熟的Django项目了。
我想在用户帐户屏幕中添加新页面,然后链接到该页面。但是我收到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>
现在当我加载/面板时,我得到一个TemplateSyntaxError:NoReverseMatch。
Reverse for 'account_history' with arguments '()' and keyword arguments '{}' not found.
更新:作为测试,我删除了模板中的链接 - 并且/ panel加载正常。如果我然后删除/users/urls.py和/users/views.py / panel仍然加载。我已删除所有cookie,历史记录等。我是否必须在终端上运行命令(如ruby中的rake)来提交更改urls.py?或者应该改变'只是工作'?
答案 0 :(得分: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 :(得分:2)
如果你正在使用mod_wsgi,那么就简单了:
$ touch /path/to/your/wsgi_file.wsgi
应该做的伎俩(无需重启服务器)。
答案 2 :(得分:1)
移动它:
url(r'^panel/history/$',
'theproject.users.views.history',
name='account_history'
),
从users/urls.py
到项目级urls.py
。
可能users/urls.py
未与主urls.py
相关联,/panel/
也定义了{{1}}的视图
答案 3 :(得分:1)
回答我自己的问题(基于提供的帮助here)...
由于服务器正在生产,因此在重新启动服务器之前,对urls.py
的更改不会产生任何影响。目前我没有su
访问权限,因此无法apachectl restart
,但似乎这将解决此问题。