2012-06-29 24 views
9

.NET MVC ile deneyimliyim ve bir Python framework'ü öğrenmek istiyorum. Piramit'i seçtim.Piramit çerçevesi ve ana şablonlar/ana sayfa/kısmi görünümler

.NET MVC bir ana sayfa, görünümleri ve kısmi görünümleri kavramı vardır.

<%@ 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> 

Sonra ana sayfasında MainContent tarafından tanımlanan uzayda dolduracak bir görünüm oluşturabilirsiniz: Bir ana sayfa gibi bir şey olmazdı. Normalde bir ana sayfasında tanımlanan olacağını içerik - - Piramit wiki öğretici here geçiyor

, görüyorum yazar onun şablonları her birine aynı içeriği çok tekrarladı ve tamamen KURUihlal etti.

Pyramid'de ana sayfası bir kavram var mı?

+1

, bu cevabın bir göz: http://stackoverflow.com/a/11025111/320021 - Size nasıl bir örnek için Bukalemun ile bir ana şablona geçebilir. – Sergey

+0

Çoğu modern şablon motoru tarafından uygulanan iki ana kod yeniden kullanma yöntemi vardır: * bir şablon diğer şablonlar veya şablonlar içerebilir * Bir şablon üst şablonu değiştirmek veya genişletmek için başka bir şablondan miras alabilir –

cevap

15

Tıpkı MVC.NET Piramidi, herhangi bir sayıda şablonlama dilini kullanabilir ve neredeyse hepsi ana sayfalara benzer kavramları destekler. Bunların hiçbiri ;-)

Bukalemun muhtemelen en uzaklarda olsa o çağrı onları - Kalıp sayfalarda ContentPlaceholder, vs.) alanlarını tanımlamak için kullanmak araçları Chameleon macros denilen ve de adlandırılır Oldukça ağır kısaltma METAL (Macro Expansion Template Attribute Language).

Jinja2 ve Mako'da, blocks olarak adlandırılır ve Breve bunları slots olarak adlandırır.

Bukalemun:

<!-- 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:

İşte

bir ana sayfa bunların her görünebileceğinin ne
<!DOCTYPE html> 
<html> 
<head> 
<title><%block name="title" /></title> 
</head> 
<body> 
<%block name="content" /> 
</body> 
</html> 

Breve:

@ SeanViera cevabı ek olarak
html [ 
    head [ 
     title [ slot("title") ] 
    ] 
    body [ 
     slot("content") 
    ] 
] 
+0

Teşekkürler. Makroları okudum, ama bir nedenden ötürü başka bir şey için kullanıldığını düşündüm. Onlara daha fazla bakacağım. – ken

+4

+ içerideki şablonlama dilleri için örnekler dahil olmak üzere. :-) –