Django HttpResponseRedirect и reverse () - PullRequest
       3

Django HttpResponseRedirect и reverse ()

3 голосов
/ 10 февраля 2012

Ситуация вкратце.По какой-то причине метод reverse () не работает.

в PROJECT urls.py

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

в приложении 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

в файле ../django/core/urlresolvers.py в _get_callback, строка 167

Есть идеи, почему это не работает?Следующим шагом является вызов окна благодарности с параметром, но это должно быть легко после того, как эта настройка сработает.Должно ли быть что-то еще для импорта в views.py?

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

Из документов для reverse : "В рамках определения того, какие имена URL-адресов соответствуют каким шаблонам, функция reverse () должна импортировать все ваши файлы URLconf и проверить имя каждого представления.Это включает в себя импорт каждой функции просмотра. Если при импорте какой-либо из ваших функций просмотра возникнут какие-либо ошибки, это приведет к тому, что reverse () вызовет ошибку, даже если эта функция просмотра не является той, которую вы пытаетесь сторнировать ».

Есть ли в ваших URL ссылки project.views. ...?

0 голосов
/ 10 февраля 2012

Не слишком уверен в макете вашего модуля, но на основе строки include () в urls.py похоже, что вы можете добавить «проект» к аргументу в вашем вызове reverse ().

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

Это или у вас может быть ошибка в представлении.

...