2014-09-06 4 views
1

나는 데이터를 스크레이퍼로 보내고 동시에 양식 입력에서 URL을 생성하는 양식 작업을하고 있습니다. 반환 된 템플릿은 완벽하게 작동하지만 URL 변경이 끝나면 전체 양식이 URL에 제공되므로 이유를 파악할 수 없습니다. 내가 같이하기를 원하는플라스크 형식의 URL 입력

http://localhost/options/%3Cinput%20id%3D%22symbol%22%20name%3D%22symbol%22%20type%3D%22text%22%20value%3D%22%22%3E 

을 :

http://localhost/options/ABC 

Form 클래스 :

class OptionsForm(Form): 
    symbol = StringField('Enter a ticker symbol:', validators=[Required(), Length(min=1, max=5)]) 
    submit = SubmitField('Get Options Quotes') 

조회수 :

URL은 다음과 같이 찾고 끝

# Where the form data ends up 
@app.route('/options/<symbol>', methods=['GET', 'POST']) 
def options(symbol): 
# Created this try/except so I could test functionality - for example, I can do 'localhost/options/ABC' and it works 
    try: 
     symbol = request.form['symbol'] 
    except: 
     pass 
    return render_template('options.html', symbol=symbol, company_data=OS.pull_data(symbol, name=True)) 

# Where the form lives 
@app.route('/', methods=['GET', 'POST']) 
def index(): 
    form = OptionsForm() 
    print(form.errors) 
    if form.validate_on_submit(): 
     return redirect(url_for('options', symbol=form.symbol.data)) 
    return render_template('index.html', options_form=form) 
,363,210

템플릿 : 어떤 도움을 주시면 감사하겠습니다

<div id="options_div"> 
<form method="POST" name="symbol_form" action="{{ url_for('options', symbol=options_form.symbol) }}"> 
    {{ options_form.hidden_tag() }} 
    {{ options_form.symbol(size=10) }} 
    {{ options_form.submit(size=10) }} 
</form> 

.

답변

0

enctype='multipart/form-data'을 양식 태그에 추가해보십시오. 양식이 application/x-www-form-urlencoded (기본값) 인 것 같습니다.

편집 확인해주세요. 템플릿을 렌더링 할 때 해당 데이터 속성에는 값이 없습니다 (url_for 호출에서). 데이터 속성을 참조하지 않을 때 (원래 질문이 보여주는 것처럼), 실제 양식 요소를 참조하고있는 것입니다 (이 때문에 html이 URL에 전달 된 것을 볼 수 있습니다). 여기에 당신이 볼 수있는 옵션이 있습니다 :

  1. 어떤 종류의 프론트 엔드 자바 스크립트를 사용하여 양식의 작업 속성을 입력 상자의 값에 바인딩합니다. 각도와 같은 것이 도움이 될 것입니다 (하지만 다른 기능을 사용하지 않으면 과도 함입니다).

  2. /POST에 대한 POST 양식 (URL에는 기호 없음) 만 있으면됩니다. 그런 다음 양식 데이터에서 기호 특성을 가져옵니다.

+0

그냥 샷을 주었지만 여전히 잘못된 URL을 제공합니다. 그래도 아이디어를 가져 주셔서 감사합니다. – brohemian

+0

흠, 아마도 url_for 호출에서 symbol = options_form.symbol과 관련이 있습니다. 나는 전에 WTForms를 사용하지 않았지만 아마도 symbol = options_form.symbol.text 또는 .value 또는 something과 같을 필요가 있습니다. – pgorsira

+0

WTForms에서 시도했습니다. 내가 그랬을 때, 폼 자체가있는 페이지 (인덱스 뷰)가로드되지 않습니다. - werkzeug.routing.BuildError 메시지를 받았습니다. 다른 아이디어? 어느 쪽이든, 이것을 고려할 시간을내어 다시 한번 감사드립니다. – brohemian