2012-12-06 3 views
1

Flask에서 리다이렉트를 제공하는 것이 가장 좋은 방법인지 알고 싶습니다. 이 app.route를 호출Python Flask Redirect 처리 방법

<a href="/elastic_ips/{{region}}/delete/{{eli['public_ip']}}"><button class="btn btn-danger btn-mini" type="button">Delete</button></a> 

:

@app.route('/elastic_ips/<region>/delete/<ip>') 
def delete_elastic_ip(region=None,ip=None): 
     creds = config.get_ec2_conf() 
     conn = connect_to_region(region, aws_access_key_id=creds['AWS_ACCESS_KEY_ID'], aws_secret_access_key=creds['AWS_SECRET_ACCESS_KEY']) 
     ip = ip.encode('ascii') 
     elis = conn.get_all_addresses(addresses=ip) 

     for eli in elis: 
       result = [] 
       r = eli.release() 
       result.append(r) 
     return Response(json.dumps(result), mimetype='application/json') 

차라리 JSON으로 결과를 반환하지 I는 다음과 같습니다 삭제 버튼이 있습니다. 삭제 버튼이있는 페이지로 돌아가려면 "적절한"방법이 무엇인지 모르겠습니다. 어느 쪽이 참조로 리다이렉트하는 HTML 페이지를 넣을 수 있을까요, 아니면 리턴 값이 app.route가되도록 Flask에 내장 된 방법일까요?

답변

7

그럼 당신은 delete_elastic_ip의 URL을 반환 할 경우, url_for 기능이 엔드 포인트가 몇 가지 청사진에있는 경우 (more about this function)

모르지만되지 않은 경우,이 간단하여 쉽게 할 수있다 그 :

from flask import url_for, redirect 
.... your code ... 
return url_for('delete_elastic_ip', region=None, ip=None) 

Nones도 물론 필요한 값으로 바꿀 수 있습니다. :) 그러면 끝점으로 URL이 반환됩니다. Btw는 템플릿의 URL을 함께 사용하는 방법이기도합니다. 하드 코딩하지 말고 jinja 템플릿에서 url_for 함수를 사용하여 뷰에 대한 URL을 생성하십시오. 이 함수는 템플릿의 표준 전역 변수로 사용할 수 있습니다 (more)

다른 끝점으로 직접 리디렉션하고 아무 것도 반환하지 않으려면 플라스크에 redirect 함수가 있습니다. 당신이 원하는 경우 비록 아약스 리디렉션에 대한

from flask import url_for, redirect 
... your code... 
return redirect(url_for('delete_elastic_ip', region=None, ip=None)) 

그것은 페이지를 새로 고침합니다) 그렇게하지 않는 가장 좋은 방법은, 그것은 url_for과 함께 당신이 갈 수 있습니다 사용합니다. 아약스의 경우 url_for 결과로 json을 반환하고 그걸로 작업을 수행하십시오.

+0

감사합니다. 실제로 delete_elastic_ip 함수를 호출하는 페이지로 돌아가고 싶었지만 완벽하게 설명했습니다! –

+0

도움이 되니 기쁩니다;) –

관련 문제