2012-06-29 33 views
9

Tôi có kinh nghiệm với .NET MVC và muốn tìm hiểu một khung công tác Python. Tôi đã chọn Kim tự tháp.Khung hình kim tự tháp và các mẫu chính/trang cái/khung nhìn một phần

NET MVC có khái niệm về một trang chủ, xemquang cảnh một phần. Một trang chủ sẽ giống như thế:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 
<!DOCTYPE html> 
<html> 
<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
</head> 
<body> 
    <div> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 
    </div> 
</body> 
</html> 

Sau đó tôi có thể tạo ra một xem đó sẽ điền vào các không gian xác định bởi MainContent trong trang chủ.

Đi qua các Kim tự tháp wiki hướng dẫn here, tôi thấy tác giả đã lặp đi lặp lại nhiều nội dung giống nhau trong mỗi mẫu của mình - nội dung mà thông thường sẽ được xác định trong một trang chủ - và hoàn toàn vi phạm DRY.

Có khái niệm về trang cái trang chính trong Kim tự tháp không?

+1

Ngoài câu trả lời @ SeanViera của, có một cái nhìn tại câu trả lời này: http://stackoverflow.com/a/11025111/320021 - cho một ví dụ về cách bạn có thể vượt qua một bản mẫu chính để xem với Chameleon. – Sergey

+0

Có hai phương pháp tái sử dụng mã chính được thực hiện bởi hầu hết các công cụ mẫu hiện đại: * một mẫu có thể bao gồm các mẫu hoặc đoạn mẫu khác * một mẫu có thể thay đổi hoặc mở rộng mẫu gốc –

Trả lời

15

Cũng giống như MVC.NET Kim tự tháp có thể sử dụng bất kỳ số ngôn ngữ templating nào - và hầu như tất cả chúng hỗ trợ các khái niệm tương tự như trang chính. Không ai trong số họ gọi họ rằng mặc dù ;-)

Chameleon có lẽ là xa nhất ra khỏi đó - những công cụ mà bạn sử dụng để xác định khe trong trang chủ ContentPlaceholder, vv) được gọi là macros trong Chameleon và được gọi bằng từ viết tắt khá nặng METAL (Macro Expansion Template Attribute Language).

Trong Jinja2 và Mako chúng được gọi là blocks và Breve gọi cho chúng slots.

Đây là những gì một trang chủ có thể trông giống như trong mỗi người trong số họ:

Chameleon:

<!-- Caveat Emptor - I have never used Chameleon in anger --> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:tal="http://xml.zope.org/namespaces/tal" 
    xmlns:metal="http://xml.zope.org/namespaces/metal" 
    xmlns:i18n="http://xml.zope.org/namespaces/i18n"> 
<!-- We don't *need* all of this in Chameleon, but it's worth 
remembering that it adds it for us --> 
<head> 
<title metal:define-macro="title"><span metal:define-slot="title"></span></title> 
</head> 
<body metal:define-macro="content"> 
<div metal:define-slot="content"></div> 
</body> 
</html> 

Jinja2:

<!DOCTYPE html> 
<html> 
<head> 
<title>{% block title %}{% endblock %}</title> 
</head> 
<body> 
{% block content %}{% endblock %} 
</body> 
</html> 

Mako:

<!DOCTYPE html> 
<html> 
<head> 
<title><%block name="title" /></title> 
</head> 
<body> 
<%block name="content" /> 
</body> 
</html> 

dấu ngân:

html [ 
    head [ 
     title [ slot("title") ] 
    ] 
    body [ 
     slot("content") 
    ] 
] 
+0

Cảm ơn. Tôi đã đọc về các macro, nhưng vì lý do nào đó, tôi nghĩ rằng chúng đã được sử dụng cho một thứ khác. Tôi sẽ xem xét thêm chúng. – ken

+4

+ amillion để bao gồm các ví dụ về tải các ngôn ngữ tạo khuôn mẫu trong đó. :-) –

Các vấn đề liên quan