2010-08-10 2 views
1

동일한 템플릿을 렌더링하는 몇 가지보기가 있는데 현재 서식을 기반으로 다른 위치를 가리키는 템플릿에 몇 개의 {% url %} 태그가 있습니다.현재 URL 얻기

{% url url-name %} 

또한 가능하다 합격 :이처럼 사용할 수 있습니다 내 템플릿 있도록-1보기보기-2 같은 (이름이 URL에 대한) 뷰의 이름을 제공합니다 어떤 상황 변수가있다 어떤 뷰가 호출되는지 이해할 수 있도록 템플릿에 추가 정보. 그러나 그것은 내가 생각하기에 우아한 해결책은 아니다.

답변

1

뷰가 호출되는 것을 이해할 수 있도록 추가 정보를 템플릿에 전달할 수도 있습니다. 그러나 그것은 내가 생각하기에 우아한 해결책은 아니다.

물론입니다.

def view1(request, form_class=MyForm, template_name='myapp/page.html'): 
    # app code here 
    this_url = reverse('view1') 
    render_to_response(template_name, locals(), RequestContext(request)) 

def view2(request, form_class=MyForm, template_name='myapp/page.html'): 
    # app code here 
    this_url = reverse('view2') 
    render_to_response(template_name, locals(), RequestContext(request)) 

myapp/page.html : 예를 들면 다음과 같습니다이다

<a href="{{ this_url }}">Webpage</a> 

또한 말,라는 자신의 URL 태그 변수로 대신보기 이름으로 첫 번째 인수를 취 dynurl 만들 수 있습니다

def view2(request, form_class=MyForm, template_name='myapp/page2.html'): 
    # app code here 
    this_view = 'view2' 
    render_to_response(template_name, locals(), RequestContext(request)) 

myapp/page.html :

{% load dynurl_tags %} 
<a href="{% dynurl this_view %}">Webpage</a> 

현재보기에 대한 링크를 원하는 이유를 정확하게 설명하지 않았습니다. 같은 페이지로 연결 되나요?

<a href="">technically this points back to the same page</a> 
<a href="{{ request.path }}">this url is the full path before the query string</a> 
<a href="{{ request.get_full_path }}">this url is the full path plus the query string</a> 

내가 키 차이가 두보기 사이를 무엇에 대해 생각하고 그 차이를 설명하는 변수 마련하는 것이 유용 할 것이라고 생각 : 그렇게하는 방법이 몇 가지 있습니다. 그런 다음 템플릿의 해당 변수를 사용하여 새 URL을 결정하십시오.

더 복잡한 문제의 경우 Pinax groups과 그 (것)들은 implement a {% groupurl %} tag를보고 싶을 수도 있습니다. 기본적으로 이것은 주어진 앱의 모든 URL을 복제하고 URL을위한 특별한 그룹 기반의 역방향 조회를 만드는 데 사용되는 "그룹"변수를 전달할 수 있습니다.

+0

감사합니다. 나는 내가 분명히 설명 할 수 없을 것 같아. 기본적으로, 내가 필요로하는 것은 URL 이름을 얻는 것이고, {% url-url-name %}처럼 그것의 이름으로 URL을 만들 수 있습니다. 당신이 말한대로 할 수 있습니다. 나는 당신이 어느 것을 일반적으로 선호하는지 모른다. – pocoa

+0

중요한 질문은 ** 무엇을 위해 ** 당신이 URL 이름이 필요합니다. '{% url something %}'에서,'something'은 뷰의 이름입니다. 그것은 변수가 될 수 없습니다. 따라서 본질적으로 URL의 첫 번째 부분, 즉'{% url %} '이 (가) 호출 된 뷰는 항상 * 정적입니다. 즉, 다른보기를 호출해야하는 경우 '{% url %}'을 (를) 사용할 수 없습니다. 실제로 원하는 URL이보고있는 페이지와 같으면'{{request.path}} '를 사용하십시오. 실제로 원하는 URL이 해당보기와 일치하는 다른 URL 인 경우'{{this_url}} '을 사용하십시오. –

1

나는 현재 템플릿을 렌더링 뷰인지 확인합니다 장고에 직접적인 방법이라고 생각하지 않습니다. 따라서 컨텍스트 프로세서를 작성하거나 축소하는 대신 복잡성을 높이거나보기에서 정보를 보내도록 스트립합니다.

대신보기 이름을 템플릿에 보내고 해당보기를 기반으로 다른 위치를 만드는 대신 각보기에서 생성 된 URL을 보내시겠습니까 ?? 의사 결정 논리는 장고 템플릿보다는 뷰에서 훨씬 효율적입니다. 그냥 제안.

해피 코딩.

0

django-debug-toolbar을 필요할 때 개발 중에 추가하십시오. 그것은 현재 렌더링 된 페이지에 대한 충분한 정보를 보여줍니다.