2014-09-26 2 views
8

DatePicker가 포함 된 템플릿을 렌더링하려고하지만 시도 할 때 500 오류가 발생합니다. 내 코드는 맞지만, 뭔가 실패하고있는 것처럼 보이거나 올바르게 수행하는 방법을 이해하지 못하는 것 같습니다.Flask, Flask-Admin 및 WTforms가있는 DatePickerWidget

Reporting.py

from flask.ext.admin import BaseView, expose 
from wtforms import DateField, Form 
from wtforms.validators import Required 
from flask.ext.admin.form import widgets 
from flask import request 

class DateRangeForm(Form): 
    start_date = DateField('Start', validators=[Required()], format = '%d/%m/%Y', description = 'Time that the event will occur', widget=widgets.DatePickerWidget) 

class ReportingView(BaseView): 
    @expose('/') 
    def index(self): 
     form = DateRangeForm(request.form) 
     return self.render('reporting.j2', form=form) 

보고 템플릿 :

코드는 다음을이다 davidism이 코멘트에 말했듯이

{% extends 'admin/master.html' %} 
{% block body %} 
    {{super()}} 
    Working on it! 

    {% if form %} 
     {{form.start_date}} 
    {% endif %} 
{% endblock %} 
+0

예외는 무엇입니까? – dirn

+0

OK, 요청이 아니기 때문에 "request.form"을 제거했습니다. 이제는 필드가 올바르게 표시되지만 날짜를 선택하는 데는 dateTimePicker가 없습니다. 문자열 필드 만입니다. – Pepeluis

+0

DateField는 날짜 문자열 구문 분석을 제공합니다. 프런트 엔드 선택 도구가 필요하면 직접 추가해야합니다. – davidism

답변

17

, 기본값하여 DateField는 날짜 구문 분석을 제공하고, 그것을 일반 텍스트 입력으로 표시됩니다. 당신이 완벽하게 지원하는 모든 브라우저에서 날짜 선택기를 렌더링 다음 wtforms.fields.html5에서하여 DateField를 사용할 수있는 HTML5를 수용 할 준비가되면

그것은 :

from flask import Flask, render_template 
from flask_wtf import Form 
from wtforms.fields.html5 import DateField 
app = Flask(__name__) 
app.secret_key = 'SHH!' 


class ExampleForm(Form): 
    dt = DateField('DatePicker', format='%Y-%m-%d') 


@app.route('/', methods=['POST','GET']) 
def hello_world(): 
    form = ExampleForm() 
    if form.validate_on_submit(): 
     return form.dt.data.strftime('%Y-%m-%d') 
    return render_template('example.html', form=form) 


if __name__ == '__main__': 
    app.run(debug=True) 

더 일반적인 방법은 좋은 날짜 선택기를 찾을 수 있습니다 온라인으로 CSS와 JS를 사용하여 디스플레이를 처리하고 그 코드를 html 템플릿에 포함하고 클래스를 가진 html 요소에 datepicker 스타일을 적용하도록 지정합니다. 당신이 당신의 양식을 생성 할 때 다음 당신은 다만 수 : 기본적으로 그냥 속성으로 추가 할 양식 요소를 렌더링에 당신이 통과 (다른 사용을 위해 예약되지 않음)

<!-- all your CSS and JS code, including the stuff --> 
<!-- to handle the datepicker formatting --> 

<form action="#" method="post"> 
    {{ form.dt(class='datepicker') }} 
    {{ form.hidden_tag() }} 
    <input type="submit"/> 
</form> 

모든 속성을 예제를 위해 {{ form.dt(class='datepicker') }}<input class="datepicker" id="dt" name="dt" type="text" value="">을 생성하므로 CSS/JS는 사용자에게 훌륭한 인터페이스를 제공하기 위해 필요한 모든 작업을 수행 할 수 있습니다.

+0

그래, 효과가 있었다. 위젯과 동일한 "모양과 느낌"을 따르지 않고 작동합니다. 감사. – Pepeluis

+2

은'class _ = 'datepicker ''이어야합니다. – imwilsonxu

관련 문제