2010-11-09 67 views
0

我在构建我的第一个Django网站后,使用Symfony 1.3.x构建了一些网站。这两个框架都采用MVC模式。Django模板层vs Symfony模板层我是bn

Symfony允许创建“主”模板(称为布局),然后使用装饰器模式将每个单独的视图用于装饰主布局。这使设计使用相同布局的页面(例如页眉/页脚等)变得非常容易,而实际页面内容则不同。

我期待看到类似的东西在Django中可用。到目前为止,我所看到的所有例子都涉及到创建独立的视图。这样做的事情不是很干,因为我的每个视图模板都重复了很多常见的东西(页眉/页脚等)。

有没有办法建立一个'主'视图(使用Django的术语),它建立了应用于它的视图的布局?

+0

你是不是指主模板? – 2010-11-09 13:07:01

+0

也许 - 你是指django还是Symfony?我没有听说SF中的“主模板”。 – skyeagle 2010-11-09 13:24:51

+0

我正在尝试django。在Django中,“模板”是symfony中的“视图”。 – 2010-11-09 13:31:36

回答

3

从你说的话我认为你使用“视图”而不是“模板”。如果你的意思是“模板”,你应该知道django有这个问题的解决方案:template inheritance。基本上,您应该设计一个“基本”模板,它将成为每个页面的骨架,特定模板将继承该模板。下面是来自Django文档采取了简单的例子:

{% extends "base_generic.html" %} 

{% block title %}{{ section.title }}{% endblock %} 

{% block content %} 
<h1>{{ section.title }}</h1> 

{% for story in story_list %} 
<h2> 
    <a href="{{ story.get_absolute_url }}"> 
    {{ story.headline|upper }} 
    </a> 
</h2> 
<p>{{ story.tease|truncatewords:"100" }}</p> 
{% endfor %} 
{% endblock %} 

的文档不具有base_generic.html一个例子,但一个简单的一个是这样的:

<html> 
    <head> 
     <title>{% block title %} Default title {% endblock %}</title> 
     <!-- other stuff --> 
    </head> 
    <body> 
     <!-- header, etc --> 
     {% block content %} 
     Default content 
     {% endblock %} 
     <!-- footer --> 
    </body> 
</html> 

注意Default titlebase_generic.html将由扩展它的模板替换为{{ section.title }}。如果在base_generic.html范围内的模板中没有标题块,标题将为Default title。这发生在所有块上。

+0

绝对太棒了。这很有道理。感谢您的回答。 – skyeagle 2010-11-09 15:24:02

+0

不客气:) – 2010-11-09 15:25:58