Django 실전(6): RoR과 Django의 템플릿 시스템 비교

3477 단어 django
scaffold의 생성물 비록 쓸모가 크지 않지만 우리에게 최선의 실천을 가져다 준다.그중에 템플릿의 계승과 구역이 있습니다.
만약 당신이 rails의 템플릿 시스템을 깊이 사용한 적이 있다면 축하합니다: 당신은 뛰어난 인내력을 가지고 있습니다!그리고 더 중요한 것은 3분만 있으면 Django의 템플릿 시스템을 이해할 수 있다는 것이다.
우선 rails의 템플릿 시스템을 살펴보자.
1. 당신은 xxview를 만들어서 데이터를 보여 줍니다.
2. 각view마다 공통된 내용이 있다는 것을 깨닫는다.레일스도 DRY를 강조하기 때문에 공통된 부분을 빼내기로 했다.rails도 이 점을 보았기 때문에 rails가layout을 지원하는 것을 보고 매우 기뻤습니다.
3. rails의layout은 매우 간단하고 html 코드와 유사하며 <%=yield%> 부분은 구체적인 보기로 대체되어 기쁘고 위안이 됩니다.
4. 그런데 잠깐만요. 레이아웃을 어떻게 지정해요?너는 또 흥분해서 발견했다. 기본적인layout은views/layouts/application이다.html.erb, controller, action에서 특정layout을 지정할 수 있으며, 심지어는 지원 변수를 지정할 수 있습니다.흥분한 나머지, 당신은 controller가view가 해야 할 일을 하게 하는 것과 같은 것을 완전히 무시했다.
5. 당신은 좌우 구조의layout을 실현했다. 왼쪽은 네비게이션이고 오른쪽은 내용이다.이 레이아웃은 여러 뷰에서 사용할 수 있을 것 같습니다.하지만 다른view에 필요한 내비게이션이 다르다는 것을 발견했다.몇 개의view가 하나의 내비게이션을 사용하고 다른 몇 개의view가 다른 내비게이션을 사용하는 상황이 존재하기 때문에DRY,rails가 말하기를partial이 있다.view에서 <%= render "foo/bar" %>, :<%= render @mypartial %> controller/action에서 구체적인 partial을 지정할 수 있습니다.:render :partial => ’foo/bar’.비록 controller는view의 세부 사항에 더욱 관여했지만;비록,partial:foo/bar는views/foo/를 의미한다는 것을 기억해야 한다bar.html.erb.
6.view에 여러 개의 내용을layout의 다른 곳에 꽂으려면 어떻게 합니까?주요 내용 외에view에서 정의할 수 있습니다:
 
foo foo foobar bar bar
다음이 주요 내용입니다.
 
 
그리고 이 내용 블록은layout의 <%=yield:foo%><%=yield:bar%>와 <%=yield%>에 각각 삽입됩니다.


 


7. 그리고,그리고,<%=스타일시트link_tag "application"%>, <%= javascript_include_tag "html5"%> ……


여기까지 rails의 템플릿 시스템에 대해 알고 있다고 말할 수 있나요?


 


이제 우리는 마음을 놓을 수 있다. 왜냐하면 Django의 템플릿은 이해하기 쉽기 때문이다. 기본적인 변수, 라벨, 필터 등을 제외하고 템플릿의 관계는 두 가지밖에 없다.


1. 포함하다.템플릿의 같은 부분을 추출하여 함께 사용합니다.


하드 인코딩된 문자열 {% include'foo/bar.html'%} 또는 변수 이름 {% include template name%}을 사용할 수 있습니다. 변수는view에서 값을 부여해야 합니다. (주의, controller에서 아님)


2. 물려받다템플릿 상속은 Django 해결 공용 페이지 영역 DRY의 우아한 해결 방안입니다.간단하게 말하면 먼저 기초 프레임워크 템플릿을 구축한 다음에 하위 템플릿에 포함된 사이트의 공용 부분과 정의 블록을 다시 불러오는 것이다.기본 템플릿에서 컨텐츠의 다른 부분을 개별 컨텐츠 블록으로 지정:


 


...
{% block foo %}
<div>default content of foodiv>
{% endblock %}
...
{% block bar %}
<div>default content of bardiv>
{% endblock %}
...

 


 


하위 템플릿에서 계승 관계를 지정하고 오버라이드의 각 내용 블록을 지정하면 됩니다.계승된 쓰기 방법은 {% extends "base.html"%}입니다. 템플릿의 시작 부분에 반드시 두어야 합니다.


자, 당신은 Django의 템플릿 시스템을 이해했으니 다음은 제품 목록 인터페이스의 개조에 대해 쉽게 이해할 수 있습니다.두 부분으로 나뉘어집니다:base와productlist.


 


죄송합니다. 여기까지 썼는데 편폭이 짧지 않은 것을 발견했습니다.어쩔 수 없이 인터페이스의 실현을 다음 섹션으로 옮겼습니다.



좋은 웹페이지 즐겨찾기