문제

탐색 메뉴에서 현재 페이지를 강조표시하고 싶습니다.분명히 당신이 해당 페이지에 있을 때 메뉴 링크에 '활성'과 같은 클래스를 제공해야 합니다.이것은 고전적인 문제이며 많은 해결책을 보았습니다. 제안.내 문제는 내가 그들 모두를 싫어하고 그들 중 누구도 매우 건조하다고 생각하지 않는다는 것입니다.예를 들어:

@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>

태그는 현재 요청과 URL 표현식을 가져와 현재 이 페이지에 있는 경우 '활성'을 반환합니다.대안으로 URL 대신 명명된 뷰를 사용하여 이를 수행할 수 있지만 원칙은 동일합니다.

이에 대한 주요 문제는 내 탐색이 내 뷰의 99%에서 호출되지만 현재 요청 변수를 가져오기 위해 여전히 다음과 같이 템플릿에 대한 RequestContext를 구문 분석해야 한다는 것입니다.

def contact(request):
    # snip ...
    return render_to_response(
                'contact.html',
                { 'myvar' : myvar },
                context_instance=RequestContext(request))

아마도 뷰 중 하나를 제외한 모든 뷰에 이 context_instance 행을 추가해야 하는 이유는 무엇입니까? 필요 활성 링크를 강조 표시하기 위해 현재 URL/뷰를 얻으려면 요청 변수가 필요합니까?특히 대부분의 django 사이트에 있어야 하는 기능의 경우 이는 매우 습한 것 같습니다.요청이 기본적으로 포함되고 선택적으로 억제될 수 있기를 원합니다.뷰가 템플릿을 반환한 후 렌더링되기 전에 템플릿을 가로챌 수 없기 때문에 미들웨어에서 이 작업을 수행하는 방법을 찾을 수 없습니다.

어떤 제안이 있으십니까?

도움이 되었습니까?

해결책

당신의 의도는 타당합니다. RequestContext 대부분의 경우 성능상의 이유로 안전하게 생략할 수 있는 경우는 거의 없습니다.해결책은 간단합니다. render_to_response 사용 direct_to_template 지름길:

from django.views.generic.simple import direct_to_template

def contact(request):
    # snip ...
    return direct_to_template(request, 'contact.html', { 'myvar' : myvar })

...또는 render_to 데코레이터의 장고 짜증나는:

from annoying.decorators import render_to

@render_to('template.html')
def foo(request):          
    bar = Bar.object.all()  
    return {'bar': bar}     

다른 팁

현재 네비게이션에 다른 스타일을 부여하기 위해 네비게이션 마크업에 어떤 작업도 수행할 필요가 없습니다. CSS를 사용하여 이를 수행하는 선언적 방법이 있습니다.

여기에서 내 답변을 확인하세요. 장고:현재 페이지 링크를 굵게 표시하는 더 좋은 방법이 있습니까? 예를 들어.

나중에 참조하기 위해 다음을 사용할 수 있습니다. 장고 탭 OP가 원하는 것을 수행하기 위해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top