2011-09-19 33 views
12

Tôi đang cố gắng để đơn giản là có được hiện tại Site từ bên trong một khuôn mẫu để phân tích cú pháp như sau:Trang web hiện tại có thể truy cập từ mẫu không?

<h3>{{ site.name }}</h3> 

Thật không may, điều này không mang lại bất cứ thứ gì lên.

Có cách nào để truy cập trang web hiện tại từ mẫu không?

Trả lời

25

Tiêu đề câu hỏi của bạn giả định rằng "chế độ xem" và "mẫu" có thể hoán đổi cho nhau - chúng không có. Để có được trang web hiện tại trong một khuôn mẫu, nó cần được thêm vào ngữ cảnh được sử dụng để hiển thị mẫu. Nếu bạn đang sử dụng RequestContext, bạn có thể viết bộ xử lý ngữ cảnh để thực hiện điều này tự động.

Bạn có thể viết một bộ xử lý bối cảnh để làm điều này như sau:

from django.contrib.sites.models import Site 

def site_processor(request): 
    return { 'site': Site.objects.get_current() } 

Sau đó, thêm nó vào TEMPLATE_CONTEXT_PROCESSORS của bạn, và sử dụng nó như vậy:

<h3>{{ site.name }}</h3> 
+0

Tôi đang sử dụng 'django.views.generic.simple.direct_to_template', vì vậy tôi cần được bảo hiểm, phải không? Không có bộ xử lý ngữ cảnh tích hợp cho điều này? –

+0

Có, 'direct_to_template' sử dụng' RequestContext', tuy nhiên bạn sẽ cần phải viết trình xử lý ngữ cảnh của riêng bạn vì không có bộ xử lý ngữ cảnh nào trong Django. Hoặc bạn có thể chuyển đối số tới 'direct_to_template' để thêm trang hiện tại vào ngữ cảnh. –

+0

Tại sao hàm có tên 'site_processor' thay vì' site'? –

0

thật là thú vị, sử dụng bộ vi xử lý bradleyayers đã cho kết quả Null, vì vậy thay vì sử dụng khung Site, tôi đã sử dụng tham số bên trong yêu cầu.

Vì vậy, bộ vi xử lý sẽ giống như là:

def host_processor(request): 
    return { 'host': request.get_host() } 

Hy vọng nó sẽ giúp