2014-05-15 2 views
0

페이지를 새로 고치거나 다시 버튼을 제출하면 양식 다시 제출 오류가 발생합니다. 게시 요청 이후에이를 방지하기 위해 실제 페이지를 리다이렉트하면됩니다. 내가 그렇게 할 때 나는이 mainpge.html에 제출 버튼을 클릭 한 후 페이지 ... 나는 아래의 오류가리디렉션을 통한 Django 고정 확인

오류 : 시작 페이지 /에서 NoReverseMatch/

Reverse for 'testpage' with arguments '()' and keyword arguments '{}' not found. 

views.py

from django.shortcuts import render_to_response, redirect 
from django.views.decorators.csrf import csrf_exempt 
from django.template import Context, RequestContext 
@csrf_exempt 
def mainpage(request): 
    return render_to_response('mainpage.html') 

@csrf_exempt 
def startpage(request): 
    if request.method == 'POST': 
     print 'post', request.POST['username'] 
    else: 
     print 'get', request.GET['username'] 
    variables = RequestContext(request,{'username':request.POST['username'], 
      'password':request.POST['password']}) 
    #return render_to_response('startpage.html',variables) 
    return redirect('testpage') 

def testpage(request): 
    variables = {} 
    return render_to_response('startpage.html',variables)               

urls.py

urlpatterns = patterns('', 
    url(r'^$',mainpage), 
    url(r'^startpage',startpage), 

startpage.html

<html> 
<head> 
<head> 
</head> 
<body> 
<input type="submit" id="test1" value="mainpage"> 
This is the StartPage 
Entered user name == {{username}} 
Entered password == {{password}} 
</body> 
</html> 

mainpage.html

<html> 
<head> 
</head> 
<body> 
This is the body 
<form method="post" action="/startpage/">{% csrf_token %} 
Username: <input type="text" name="username"> 
Password: <input type="password" name="password"> 
<input type="submit" value="Sign with password"> 
</form> 
</body> 
</html> 

답변

0

docs에 따르면 redirect 다음 세 가지 중 하나를 취

  1. 모델 : 모델의 get_absolute_url() 함수가 호출됩니다.
  2. 보기 이름 (가능한 경우 인수가 있음) : urlresolvers.reverse이 이름을 역으로 해석하는 데 사용됩니다.
  3. 리디렉션 위치로있는 그대로 사용되는 절대 또는 상대 URL입니다.

프로토콜로 시작하지 않고 슬래시를 포함하지 않는 문자열을 전달하면 인수가 이름으로 인식되어 reverse으로 전달됩니다.

여기에 약간의 문구가있을 수 있습니다. reverseURL 패턴 이름하여보기를 보이는, 그래서 문서가 에게 뷰 이름을 소요 말할 때 실제로 에게보기를 가리키는 URL 패턴의 이름을 의미 뷰 자체의 이름이 아니라 .

url(r'^whatever/$', testpage, name='testpage') 

은 분명히 첫 번째 인수에 여러분이 원하는 패턴을 넣을 수 있습니다 : reverse는 URL의 패턴 (urls.py에서) urlpatterns에 보이는 때문에이 reverse으로 찾을 수 있도록, 당신은 그것으로 testpage를 추가해야 두 번째 인수에 대한 뷰 함수를 가져와야합니다. name 부분은 URL을 찾기 위해 reverse이 사용하는 부분입니다.

+0

고마워요 ... "말씨"는 정확한 실수였습니다 ... – user1050619

관련 문제