2010-11-14 29 views
7

nếu mọi trang web có thông báo tin nhắn mới của người dùng (số thư mới, như thư (1)), làm cách nào tôi có thể chuyển biến '{new_message_count: 1}' sang mọi chế độ xem tôi muốn để sử dụng middleware:django middleware đặt người dùng biến toàn cầu đặc biệt

class page_variable(): 
def process_request(self, request): 
    # put the variable to the request or response so can used in template variable 
    return None 

và mẫu trông giống như:

<a href="/message/">new <em>({{ new_message_count }})</em></a> 

Trả lời

5

có đã là một built-in messaging framework để xử lý tất cả những điều này cho bạn.

Tuy nhiên, giả sử bạn thực sự muốn cuộn của riêng bạn, bạn không thể chuyển mọi thứ vào ngữ cảnh từ phần mềm trung gian. Bạn có thể đính kèm nó vào đối tượng request, sau đó bạn có thể sử dụng trong chế độ xem hoặc mẫu của bạn hoặc thêm bộ xử lý ngữ cảnh có biến từ yêu cầu và thêm biến đó vào ngữ cảnh.

+0

có! đó là những gì tôi muốn, cảm ơn nhiều, nhưng làm thế nào để đính kèm nó vào yêu cầu? tôi thử "request.new_message_count = 1" hoặc "request ['new_message_count'] = 1" hoặc "request .__ class __. new_message_count = 1", nhưng không làm việc – cloudzhou

+0

Ý của bạn là gì, nó không hoạt động? Người đầu tiên nên làm việc tốt. –

+0

tôi làm điều đó tại def process_request (tự, yêu cầu):, nhưng các mẫu không nhận được biến {{new_message_count}}, tôi phải bỏ lỡ một số điều. tôi sẽ thử lại – cloudzhou

3

Trong phiên bản phát triển của django, bạn có thể chỉnh sửa nội dung mẫu từ một trung trước khi render:

class MessageCountMiddleware: 
    def process_template_response(self, request, response): 
     response.context['new_message_count'] = message_count(request.user) 

Trong Django 1.2 bạn có thể tạo một bộ xử lý bối cảnh tùy chỉnh:

def add_message_count(request): 
    return { 'new_message_count': message_count(request.user) } 

và đăng ký nó trong cài đặt

TEMPLATE_CONTEXT_PROCESSORS += [ 'my_project.content_processors.add_message_count' ] 
Các vấn đề liên quan