2013-11-26 30 views
0

我是Django的新手,我正在艱難地決定設計我的模板的最佳方法。迄今爲止我開發我的網站的方式相對簡單。我現在處於一個主頁,其中有三個不同的錨定標記指向相同的模板,但最終將根據選定的鏈接動態生成。多模板,複雜視圖或創意模型

我的問題是這是最好的解決辦法:

我應該建立三個單獨的(讓我們稱之爲路徑)模板,每個模板的唯一的URL,它代表?

我應該建立一個單獨的模板,然後加強我的視圖並傳遞一個變量,並從一個模板中生成,從而返回基於輸入的任何數據。

或者,是否有解決方案利用每個頁面的模型?

DRY似乎傾向於一個複雜的視圖模板,但我的本能似乎想要多個模板更容易維護。

感謝您的輸入。

回答

1

使用Django使用{% extends %}模板標籤繼承其他模板,那麼你在此改變{% block %}你必須是具體的。

即。

base.html文件

​​

然後在specific.html

{% extends 'base.html' %} 

{% block content %} 
    <p>specific content that will be shown instead</p> 
{% endblock %} 

塊可以是小的並且不必須被覆蓋,用途例如

<body class="{% block bodyclass %}{% endblock %}"> 

是常見

+0

我很清楚這一點。我的問題是,製作多個模板(例如擴展基礎)是否更好,其中所有標記都是相同的,只有內容會發生變化。我相信我會違反DRY原則,如果我創建了3個模板全部使用相同的標記並且只更改了內容。 – Justin

+1

好的,如果你可以使模板足夠通用,那麼它很好的重用相同的模板。幾個不同的視圖可以渲染具有不同上下文的相同模板。 – krs

+0

因爲我沒有考慮做不同意見的可能性,所以給你信譽,我以爲我會用一種觀點來區分回報。使用一個模板的多個視圖絕對是答案。謝謝! – Justin

1

,您可以撥打site_base.html所有的<head><script>等元素,並用

<!-- HEAD --> 
    {% block content %} 
    <div class='container' id="default_container"> 
     Your default content 
    </div> 
    {% endblock content %} 
<!-- FOOT --> 

然後在你的urls.py你確定「路徑」 - 網址應用到您的意見。如果您desireing一個簡單的平面頁面,您可以把TemplateView.as_view(template_name = "page_1.html")喜歡:

urlpatterns = patterns('', 
    (r'^$', TemplateView.as_view(template_name='site_base.html')), 
    (r'^page_1/$', TemplateView.as_view(template_name='page_1.html')), 
) 

,並在您page_1.html

{% extends 'site_base.html' %} 

{% block content %} 
    <div class='container' id="page_1"> 
    Your Page 1 content that will overwrite `block content` tag from site_base.html 
    </div> 
{% endblock content %} 

你可以把你想要的任何{% block }%標籤。
我有時使用我的Flat應用程序。它搜索與URL名稱的模板或返回404

# urls.py 
from views import flat_render_view 

urlpatterns = patterns('', 
    url(r'^(?P<template_name>\w+)/$', flat_render_view, name='flat_view'), 
) 

# views.py 
from django.http.response import Http404 
from django.template.base import TemplateDoesNotExist 
from django.shortcuts import render 

def flat_render_view(request, **kwargs): 
    try: 
     return render(request, "flat_pages/%s.html" % kwargs['template_name']) 
    except TemplateDoesNotExist: 
     raise Http404 
+0

這仍然不回答我的問題。我是否創建了三個具有相同標記的模板,並且只更改了硬編碼的內容,還是創建一個模板並在視圖中動態加載內容? – Justin

+0

這取決於你必須做什麼。雜誌文章 - 將數據從db模型傳遞到模板上下文。信息網站的靜態頁面 - 寫「塊」。如果你創建一個'static_base'並使用它,你會得到最佳的DRY。我寧願使用多個模板部分,並將它們包含到我的基地。 – McAbra