Tôi muốn làm nổi bật trang hiện tại trong menu điều hướng. Rõ ràng tôi cần phải cung cấp cho các liên kết menu một lớp học như 'hoạt động' khi bạn đang ở trên trang của họ. Đây là một vấn đề cổ điển và tôi đã thấy nhiều giải pháp proposed. Vấn đề của tôi là tôi ghét tất cả chúng và xem xét không ai trong số họ được rất DRY. Ví dụ:Tại sao tôi phải vượt qua RequestContext trong tất cả các câu trả lời của mình?
@register.simple_tag
def active(request, pattern):
import re
if re.search(pattern, request.path):
return 'active'
return ''
----
{% load tags %}
<div id="navigation">
<a class="{% active request "^/about/" %}" href="/about/">About</a>
<a class="{% active request "^/contact/" %}" href="/contact/">Contact</a>
<a class="{% active request "^/services/" %}" href="/services/">Services</a>
</div>
Thẻ yêu cầu hiện tại của bạn và biểu thức url và trả về 'hoạt động' nếu bạn đang ở trên trang này. Ngoài ra, điều này có thể được thực hiện với các lượt xem có tên hơn là các url nhưng nguyên tắc thì giống nhau.
vấn đề chính của tôi với điều này là chuyển hướng của tôi sẽ được gọi là trên 99% số điểm của tôi và bài viết nào, để có được biến yêu cầu hiện tại tôi vẫn còn có phân tích một RequestContext với mẫu với một cái gì đó như thế này:
def contact(request):
# snip ...
return render_to_response(
'contact.html',
{ 'myvar' : myvar },
context_instance=RequestContext(request))
Tại sao tôi cần phải thêm dòng context_instance này vào mỗi chế độ xem của mình khi có lẽ tất cả nhưng một trong số chúng cần biến yêu cầu để nhận url/chế độ xem hiện tại để đánh dấu liên kết đang hoạt động? Điều này có vẻ khủng khiếp ướt, đặc biệt là cho một tính năng mà phải ở phần lớn các trang web django. Tôi muốn yêu cầu được bao gồm theo mặc định và có thể tùy chọn ngăn chặn nó. Tôi không thể tìm thấy một cách để làm điều này trong middleware như tôi không thể đánh chặn các mẫu trước khi kết xuất của nó sau khi xem đã trả lại nó.
Mọi đề xuất?
Trình trang trí @render_to rực rỡ! Cảm ơn! – Jimmy
+1 để giới thiệu @render_to! lưu ý rằng [django-annoying] (https://github.com/skorokithakis/django-annoying) đã được thực hiện và di chuyển do không hoạt động – antiplex
4 năm sau đó và Django 1.5 đã xóa 'direct_to_template'. Những gì bây giờ sẽ là cách được đề nghị để làm điều này, mà không sử dụng django-gây phiền nhiễu – Patrick