Я пытался заставить этот простой кусок кода работать нормально, но все равно не могу. Прошли несколько других ссылок. Я не могу понять, что я делаю неправильно. У меня есть функция javascript submitData()
которая просто должна сделать post
вызов ajax для представления django. В представлении django просто нужно проверить, является ли запрос post
, если он есть, он должен перенаправить на другую страницу.
Моя функция javascript submitData()
приведена ниже, а также добавлена часть кода, которая позаботится о передаче маркера csrf
вместе с post
запросом.
function submitData()
{
$.post('/loggedin/',{"fname":"name1","lname":"name2"},function(data){
alert("Back from views.py");
});
}
$(function () {
$.ajaxSetup({
headers: { "X-CSRFToken": getCookie("csrftoken") }
});
});
function getCookie(c_name)
{
if (document.cookie.length > 0)
{
c_start = document.cookie.indexOf(c_name + "=");
if (c_start != -1)
{
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) c_end = document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
В моем views.py
меня есть следующий код,
def loggedin(request):
if request.method == "POST":
fname = request.POST.get('fname')
print fname #The code comes here, prints the fname
args = {}
args.update(csrf(request))
return render_to_response('loggedout.html',args,context_instance=RequestContext(request)) #This does not redirect to a different page
print "outside in loggedin"
args = {}
args.update(csrf(request))
return render_to_response('loggedin.html',args, RequestContext(request))
Когда выполняется post
вызов, отображается имя fname, но перенаправление, которое предположительно должно render_to_response()
функцией render_to_response()
, не происходит. Вместо этого post
вызов возвращается, и выводится post
о предупреждении в post
вызове "Назад из views.py". Я не уверен, чего я упускаю.
Вы можете перенаправить после post
успешного завершения с помощью JavaScript.
function submitData()
{
$.post('/loggedin/',{"fname":"name1","lname":"name2"},function(data){
alert("Back from views.py");
window.location = 'yourpage.hmtl'
});
}
Или, если вы отправляете имя страницы в ответ, вы можете использовать data
для перенаправления на страницу.
render_to_response
loggedin()
вviews.py
имеетrender_to_response
(). Я просто используюrender_to_response()
, заданную библиотекой django dshango.shortcuts. Код как в?