redirect
должен перенаправить на реальный URL (это перенаправление HTTP, а не просто вызов Python).
В вашем url conf нет сегмента error_message, даже если вы его установилитак, что по умолчанию представление функция вызывается с error_message в качестве kwarg.
Так как это ваша страница индекса, и вы, вероятно, не хотите добавлять дополнительные сегменты пути к URL, который выможет быть, взломать его с помощью GET Vars.например,
def page_index(request):
if 'error_message' in request.GET:
print request.GET['error_message']
from django.core.urlresolvers import reverse
def add_page(request):
return redirect('%s?error_message=test' % reverse('page_index'))
urlpatterns = patterns(
'x.views',
url(r'^$', 'page_index', name='page_index'),
url(r'^add/$', 'add_page', name='add_page'),
)
обновлено:
Думая об этом, когда я шел домой, хотя ваш вопрос о перенаправлении и kwargs и т. д., возможно, лучшим вариантом здесь будетиспользовать структуру сообщений Django и полностью исключить error_message
из вашего поля зрения kwargs, GET-переменных и т. д.
например,
from django.contrib import messages
def add_page(request):
messages.add_message(request, messages.ERROR, 'test')
return redirect('page_index')
Это также позволяет избежать возможности людейURL-адреса craft со своими составленными сообщениями об ошибках, которые могут представлять угрозу безопасности.