2010-06-11 5 views
4

웹 테이블에 대한 CherryPy와 함께 일부 테이블 (SQlite)을 관리하기위한 html 양식으로 구성된 웹 응용 프로그램이 있습니다. 먼저 파이썬 방식으로 완전히했고 html 문자열을 통해 생성했습니다. 공통 머리글, 꼬리말 등이 별도의 모듈에 기능으로 정의되어 있습니다.템플릿 대 코드화 된 HTML

나는 또한 템플릿 아이디어가 마음에 든다. 그래서 나는 꽤 개발자 친화적 인 Jinja2를 시도했다. 처음에는 템플릿을 사용할 수있는 방법이라고 생각했지만 페이지가 단순했을 때였습니다. .css 및 .js 파일이 도입되면 (.html 파일과 동일한 폴더에있을 필요는 없음) 계속 증가하는 {{...}} 변수 및 {% ... %} 명령이 도입되면서, 디자인 타임에 문제가 생기기 시작했습니다. 비록 런타임에 좋게 보였지만 말입니다. 내가 또는 섹션에서 추가 자바 스크립트가 필요할 때 상황이 더욱 어려워졌습니다.

필자가 볼 수있는 한 템플릿 사용의 주요 이점은 다음과 같습니다. 페이지의 비 동적 요소는 디자인 중에 브라우저에서 쉽게 볼 수 있습니다. {} 자리 표시자를 제외하고 html은 파이썬 코드와 별도로 유지됩니다. 회사에 웹 페이지 디자이너가있는 경우에도 Python을 모른 채 디자인 할 수 있습니다.

몇 가지 단점이있는 동안 : {{}} 구분 기호를 볼 수 브라우저 관련 .CSS에서 디자인 타임에 볼 수 있으며 파일을 디자인 타임에 브라우저에서 효과를 볼 수 동일한 폴더에 있어야 된 .js 때. 데이터, 변수, 목록 등은 고급으로 준비되어야하며 전역 적으로 선언되거나 render() 함수에 매개 변수로 전달되어야합니다.

그래서 '하드 코딩 된'HTML을 사용하고 언제 템플릿을 사용해야합니까? 나는 최선의 방법을 확신하지 못하기 때문에 다른 개발자들의 의견을 듣고 싶습니다.

TIA, Alan

답변

4

정적 파일 문제를 해결하는 가장 간단한 방법은 html에서 상대 경로를 참조하는 것입니다. 예를 들어 당신이 조금 더 많은 작업에 넣어하고자하는 경우 <img src="static/image.jpg" />

, 당신은 당신이 당신의 템플릿을 표시하는 미니 서버를 작성하여 언급 된 모든 디자인 타임 문제를 해결할 수 있습니다.

  1. 모든 템플릿에 대한 예제 값이 들어있는 간단한 데이터 구조로 가득 찬 파일을 유지 관리하십시오.
  2. Werkzeug과 같은 마이크로 프레임 워크를 사용하여 로컬 컴퓨터에서 http를 제공하십시오.
  3. 데이터 구조 목록 또는 서식 파일 디렉터리를 검색하여 모든 서식 파일에 대한 링크가있는 색인 페이지를 생성하는 루트 요청 처리기를 작성합니다.
  4. 루트가 아닌 요청에 대한 보조 요청 처리기를 작성합니다.이 요청 처리기는 요청 된 템플리트를 동일한 이름의 데이터 구조로 렌더링합니다.

이 도구는 몇 시간 안에 작성할 수 있으므로 템플릿 디자인이 매우 편리합니다. Werkzeug에 내장 된 wsgi 서버의 한 가지 좋은 기능은 파일이 변경되었음을 감지하면 자동으로 다시로드 할 수 있다는 것입니다. 템플릿을 편집하고 인덱스 페이지의 링크를 하루 종일 클릭하는 동안 미니 서버를 계속 실행할 수 있습니다.

+0

멋진 아이디어 포레스트 - 제안 사항에 저는 방금 작은 프로그램을 작성했습니다. CherryPy를 사용하여 템플릿을 표시해야합니다. CSS 파일, 테스트 데이터 및 모두 ... 좋은 생각이 들었습니다. 단일 폴더 내의 모든 파일을 나열하는 색인 ​​페이지가 있습니다. 문안 인사. –

1

템플릿 사용을 적극 권장합니다. 템플릿은 응용 프로그램에 좋은 MVC 구조를 장려하는 데 도움이됩니다. HTML, IMHO를 내보내는 Python 코드는 잘못되었습니다. 내가 말하는 이유는 파이썬 코드가 로직을 수행하고 프리젠 테이션에 대해 걱정할 필요가 없기 때문입니다. 템플릿 구문은 대개 템플릿 내에서 많은 로직을 수행 할 수 없도록 제한적이지만 필요한 프레젠테이션 특정 유형 논리를 모두 수행 할 수 있습니다.

ymmv.

+1

예, 웹 개발자가 템플릿을 처리 할 수 ​​있으므로 코딩에 집중할 수 있습니다. – Prozaker

1

템플릿은 비즈니스 로직과 프리젠 테이션을 분리하는 가장 좋은 방법이라고 생각합니다. 열쇠는 좋은 템플릿 엔진, 특히 템플릿 자체에서 결정을 내릴 수있는 엔진입니다. 파이썬의 경우, 나는 Genshi 템플릿 엔진이 꽤 좋은 것으로 나타났습니다. 그것은 Trac 위키/이슈 트래킹 시스템에서 사용되며 매우 강력합니다. 템플리트는 여전히 쉽게 사용할 수 있습니다.

다른 작업에서는 BeautifulSoup 모듈을 사용하는 경향이 있습니다. 간단한 HTML 페이지를 만들고 BeautifulSoup로 구문 분석하고 결과 객체를 사용하여 필요한 데이터를 추가 한 다음 출력을 대상 (일반적으로 나를위한 파일)에 씁니다.

+1

아니요. 프리젠 테이션 논리가 필요합니다. DRY를 위해서는 비즈니스 로직만큼 강력해야합니다. 디버깅 가능하고 테스트 가능해야합니다.더 이상 html로 보이지 않습니다. –

+0

@Stephan Eggermont - 비즈니스 로직처럼 "강력한"프레젠테이션 논리의 예는 무엇입니까? "프리젠 테이션 로직"은 실제로 비즈니스 로직이 계산을 수행하고, 조건을 확인하고, 값을 파생시키는 "장소"에 "물건"을 넣고 있습니다. 언제 데이터 프리젠 테이션에 복잡한 작업을해야합니까? 예 : –

+0

(부분적으로) 비즈니스 규칙에서 파생 될 수있는 클라이언트 측 유효성 검사 –

5

필자는 파이썬 개발자는 아니지만 여기서 대답하겠습니다. 템플릿 사용에 대한 아이디어는 PHP와 Python에서 공통적이라고 생각합니다.

깨끗한 코드를 유지

  • 처럼, 많은 많은 많은 adventages 템플릿을했다 사용. "논리"(컨트롤러) 코드를 "보기"와 분리하는 것은 매우 중요합니다. HTML/CSS/JS 출력을 혼합 한 프로젝트 작업은 정말 어렵습니다.
  • HTML을 별도의 파일에 보관해도 코드 자체를 수정할 필요가 없습니다. 예를 들어, 컨트롤러 코드 (파이썬 코드)를 입력하면 각 "문자 앞에 슬래시를 넣어야 할 수도 있습니다.
  • 웹 디자이너에게 템플릿 구문의 기초를 배우도록 요청할 수 있으므로 작업을 손상시키지 않고도 많은 도움을받을 수 있습니다. 사실 많은 adventages가 있지만, 사람들은 나를 위해 가장 중요한

(주어진 언어에 경험이없는 사람이 뭔가를 수정할 때 매우 일반적이다) 논리.

disadventage입니다 당신은 렌더링 함수에 매개 변수를 전달해야합니다 ... 많은 일을 필요로하지 않습니다, 나를 믿어 :) 그것이 로직과 뷰를 섞은 프로젝트를 유지하는 것보다 훨씬 쉽습니다.

일반적으로 당신이 한 번 봐해야> MVC 장단점 < 질문 : 해변 개발자로 What is MVC and what are the advantages of it?

+0

내가 본 템플릿 시스템보다 Seaside에서 코드를 깨끗하게 유지하는 것이 더 쉽습니다. –

+1

@Stephan Eggermont 나는 그것이 아마도 개발자에게는 사실 일 것이며 아마도 디자이너에게는 사실이 아닐 것이라는 것에 동의 할 것이다. 템플릿 시스템의 요점은 디자이너가 디자인 작업을하고 개발자가 원래의 결과를 만들기 위해 다른 구문을 사용하여 디자인을 다시 작성하는 대신이를 사용할 수 있도록하는 것입니다. –

+0

우리는 함께 일하는 효율적인 방법이 필요합니다. 템플릿은 실패한 것입니다. –

1

, 당신의 디자이너가 CSS를 할 수 있을지는 템플릿에 대한 사용을 볼 수 없습니다. 실제로, 나는 템플릿 DRY를 유지하는 것이 불가능하다는 것을 안다. this question을보고 코드 (DSL)를 사용하여 페이지를 생성하는 이점을 확인하십시오. 물론 레거시에 구속받을 수도 있습니다.

웹 앱에서 프리젠 테이션 (HTML)과 비즈니스 로직을 분리해도 모듈화가 제대로 이루어지지 않아 커플 링이 낮고 결합력이 높습니다. 그래서 별도의 템플릿 시스템이 제대로 작동하지 않습니다.

제프 앳 우드 (Jeff Atwoods)의 "CSS에 무슨 문제가 있습니까?" 이것은 작은 토크 세계에서 오랫동안 해결 된 문제입니다. Phantasia DSL

+0

나는 DSL이 항상 템플릿 언어에 좋은 아이디어는 아니지만 Genshi, Jinja2 또는 Django의 템플릿 프레임 워크는 몇 가지 특수 태그가있는 거의 직선 HTML라고 동의합니다. 이러한 유형의 템플릿은 DSL을 사용하여 발생할 수있는 많은 문제를 해결합니다. –

+0

어? 나는 템플릿이 없다고 주장한다. Seaside DSL은 HTML (및 javascript)을 생성하는 데 적합하며 통합되어 있습니다. –

+1

템플릿 시스템의 요점은 프리젠 테이션 계층이 크게 달라질 수 있다는 점입니다. 원하는 출력이 HTML이 아니거나 생성기가 지원하지 않는 HTML 버전 일 때 자동 생성 HTML에 의존해야하는 이유는 무엇입니까? 당신이 해결하려고하는 문제가 무엇인지 모르겠지만 지금까지 겪어 본 문제는 없습니다. –