2011-02-03 68 views
1

我想寫一個裝飾,將提供價值給模板渲染環境,就像這樣:在實現它看起來是這樣的如何在Django視圖裝飾器中的上下文中設置值?

@deco(art=Nouveau) 
def my_wall(request): 
    # should have art == 'something' in the template 
    return render_from_template('plain_white.html', {art:'something'}, context_instance=RequestContext(request)) 

@deco(art=Nouveau) 
def my_wall(request): 
    # should have art == Nouveau in the template 
    return render_from_template('plain_white.html', {}, context_instance=RequestContext(request)) 

我的初步嘗試:

class deco(object): 

    def __init__(self, art=None): 
     self.art = art 

    def __call__(self, f): 
     @wraps(f) 
     def wrapper(request, *args, **kwargs): 
      if self.art: 
       request.setdefault('art', self.art) 

      return f(request, *args, **kwargs) 

然而,這不起作用,因爲請求不是真正的詞典。

我該如何執行此操作?

回答

3

做到這一點的唯一方法是如果裝飾器本身負責渲染和返回模板。有一個相當完善的代碼片段完成這個:render_to裝飾者。這個想法是,你的視圖只是返回一個字典,而裝飾器實際上呈現它。您應該可以編輯該代碼段,以便處理默認情況。

相關問題