Django HttpResponseRedirect和reverse()

时间:2012-02-10 17:51:02

标签: django django-views reverse

情况简而言之。由于某种原因,reverse()方法不起作用。

在PROJECT中urls.py

url(r'^enrollment/', include('project.enrollment.urls')),
APP中的

urls.py

url(r'^thanks/$', 'enrollment.views.thanks', name='enroll_thanks'),

和views.py

from django.core.urlresolvers import reverse
def thanks(request):
    return render_to_response('enrollment/thanks.html', {}, context_instance=RequestContext(request))

def enroll(request):
    ''' some code for handling the form'''
    return HttpResponseRedirect(reverse('enrollment.views.thanks'))

此反向导致以下错误: 无法导入project.views。错误是:没有名为views的模块

在_get_callback,第167行的文件../django/core/urlresolvers.py中

知道为什么这不起作用?下一步是使用参数调用thanks-view,但在此设置工作后应该很容易。是否应该在views.py中导入更多内容?

2 个答案:

答案 0 :(得分:4)

来自reverse的文档:“作为计算哪些URL名称映射到哪些模式的一部分,reverse()函数必须导入所有URLconf文件并检查每个视图的名称。这涉及导入每个视图函数。如果在导入任何视图函数时出现任何错误,则会导致reverse()引发错误,即使该视图函数不是您要反转的函数。

您的任何网址是否引用project.views. ...?

答案 1 :(得分:-1)

不太确定您的模块布局,但根据urls.py中的include()行,您可能希望添加“项目”。也可以在reverse()调用中使用参数。

reverse('project.enrollment.views.thanks')

或者您可能在视图中有错误。