2012-08-03 102 views
0

內查看這看起來非常簡單,但是,雖然我可以猜到,你如何讓一個視圖中的視圖,或者更準確地說,是一個動態的模板內的動態模板。你看,我有這些塊的HTML包含某些事情的統計資料。我將如何創建一個返回其中一個框的視圖,以便另一個視圖可以將它們插入到模板塊中?它是「確定」,只是它返回它的功能,還是我「必須」遵循相同functionName(request)的事情,而不是functionName(info1, info2, info3)像一個正常的功能。這看起來很普遍,會有某種標準。Django的:觀點

+0

查看自定義模板標籤。 – 2012-08-03 19:39:33

回答

1

如果我理解你,你基本上是在談論預填充模板內容。基本上,你需要在許多視圖中存在一個共同的上下文環境,但是你不想爲每個視圖重複自己。使用基於函數的觀點,最好的辦法是簡單地具有泛型方法,它利用這個護理:

def add_some_context(context={}): 
    context['foo'] = 'bar' 
    return context 

def view1(self, request): 
    context = { 
     'something1': 'blah', 
    } 
    return render_to_response('template1.html', add_some_context(context), context_instance=RequestContext(request)) 

def view2(self, request): 
    context = { 
     'something2': 'blah', 
    } 
    return render_to_response('template2.html', add_some_context(context), context_instance=RequestContext(request)) 

這兩種觀點都將有你可以使用一個foo上下文變量,然後。與基於類的意見做,你可以創建一個混合類:

class MyViewMixin(object): 
    def get_context_data(self, **kwargs): 
     context = super(MyViewMixin, self).get_context_data(**kwargs) 
     context['foo'] = 'bar' 
     return context 

class MyView1(MyViewMixin, DetailView): 
    ... 

class MyView2(MyViewMixin, ListView): 
    ... 

當談到時間把它添加到實際的模板,你可以在每個視圖的模板,從實現foo上下文變量模板繼承某種程度上來說。

如果是應該應用於視圖的每個視圖,那麼上下文處理器更合適,但如果只是針對少數視圖,那麼這兩種方法將爲您提供良好的服務。