2012-07-10 6 views
2

로그인 양식, 동적 메뉴 (데이터베이스에서 가져온 항목), 사이트 통계 등 사이트에서 위젯을 만들려면 어떻게해야합니까?플라스크의 페이지에 위젯을 표시하는 방법은 무엇입니까?

기본 템플릿 밖으로 확장되는 템플릿을 렌더링 할 수 있다는 것을 알고 있습니다. 기본 템플릿에서 이러한 위젯을 만들 수 있습니다.

하지만 로직을 기본 템플릿에서 내 코드로 옮기는 방법을 모르겠습니다. 예를 들어, 블록에 대한 선택 데이터. 이러한 작업은 템플릿에서 수행 할 수 있지만 내 의견으로는 좋지 않은 방법입니다.

나쁜 영어로 죄송합니다. 당신이 이해할 수 없다면, 나는 다시 말하려고 노력할 것입니다.

+0

[컨텍스트 프로세서] (http://flask.pocoo.org/docs/templating/)가 발견되었습니다. 내가 필요로하는 것 같다. 그것을 사용하는 것이 옳은가? – Ticksy

+1

이 값을 렌더링하는 모든 템플릿에서 항상 사용할 수 있도록하려면 예, 절대적으로 그렇습니다. –

답변

2

WTForms이라는 파이썬 라이브러리를 사용할 수 있습니다. jinja2 템플릿을 사용하여 렌더링 할 수있는 데이터베이스 기반의 다른 위젯 및 양식을 작성하기위한 코드를 작성하는 데 도움이됩니다.

class YourForm(Form): 
     your_field1 = TextField() 
     .... 
     your_fieldn = SubmitField() 


    @app.route('/') 
    def view(): 
     form=YourForm() 
     return render_template('your.html', form=form) 

    In your.html 
    <form > 
    {{ form.your_field1 }} 
    .... 
    {{ form.your_fieldn }} 
    </form> 

자세한 내용은 form validation and rendering에 대한이 플라스크 패턴을 확인하십시오.

편집 :

  1. 당신은 global dict of jinja environment를 사용할 수 있습니다 모든 템플릿에서 사용할 전역 변수를 만들려면 두 가지 방법이있다. 이 코드입니다 :

    app.jinja_env.globals.update({'variable':1}) 
    
  2. 당신은 ContextProcessor를 사용할 수 있습니다. 코드 :

    @app.context_processor 
    def inject_variable(): 
        return dict(variable=1) 
    

지금 앱의 템플릿에 variable에 액세스 할 수 있습니다.

+0

감사합니다. 나는 WTForms를 보게 될 것이다. 하지만 당신의 코드는 내가 필요로하는 것이 아닙니다. 위젯 컨텍스트를 각 뷰의 템플릿에 추가하는 것을 피하고 싶습니다. – Ticksy

+0

@Ticksy 글로벌 위젯에 대해 이야기하고 있습니까? 따라서 한 곳에서 템플릿을 정의하고 템플릿에서 자동으로 사용할 수 있습니까? – codecool

+0

예, 그게 전부입니다. – Ticksy

관련 문제