2012-08-31 71 views
0

我有一個將「book」對象從我的視圖傳遞到模板的應用程序。如果模板中存在項目,自動添加更多項目

如果正在傳遞「book」,我想自動向模板上下文中添加更多項目。我不想爲所有通過「書」的觀點去做。

例如如果「book」存在,則將與「books」有關的「other_books_user_read」添加到模板中。

我正在嘗試使用中間件來做到這一點,但我無法弄清楚如果「book」存在時如何檢查上下文。

回答

0

您可以製作一個模板標籤來完成此行爲,或者您可以將一種方法放在您可以在模板中訪問的書模型上。

這裏是最簡單的解釋:

class Book(Model): 
    def other_books_users_read(self): 
     return Book.objects.filter(...) 

{{ book.other_books_users_read }} 

模板標籤:這是你的責任,以找出一個自定義模板標籤是如何工作的,但本質上的代碼將是...

@register.assignment_tag 
def get_other_books_users_read(book): 
    return Book.objects.filter(...) # logic here to get the books you need. 

{% get_other_books_users_read book as other_books_users_read %} 
{% for book in other_books_users_read %} 
... 

現在,如果你真的想在上下文中使用它,並且一行代碼(和一個點)工作太多,可以設置一個將內容注入上下文的中間件。

https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs#process-template-response

class MyMiddleware(object): 
    def process_template_response(self, request, response): 
     if 'book' in response.context_data: 
      response.context_data['other_books'] = Book.objects.filter(...) 
     return response 

但IMO這是使用模板的上下文中間件,因爲你從字面上有機會獲得一本書對象在模板中一個愚蠢的方式。

相關問題