2010-08-19 2 views
0

나는 어떻게 불러야하는지에 따라 레이아웃 (extends 태그)의 유무에 관계없이 표시하려는 사용자 동의서 같은 일부 페이지가 있습니다. 이 페이지를 iframe에로드하는 데 jQuery Fancybox을 사용하고 있습니다. JS가 비활성화 된 경우 링크는 전체 레이아웃이있는 새 창에서 열어야합니다. 그렇지 않으면 iframe에있는 경우 링크가 필요하지 않습니다. 지금 현재로 레이아웃없는 페이지 버전을 얻는 방법은 무엇입니까?

, 나는

if(window.location != window.parent.location) { 
    $('body').html($('#content')); 
} 

머리글/바닥 글 (단지 콘텐츠 부분과 몸을 교체)를 빼내야하는 jQuery를 사용하고 있어요 그러나 그 것이다 물건을로드 할 권리를하지 않는 것 표시되지 않습니다 (또는 JS가 시작될 때까지 0.5 초 동안 표시됩니다). 내가 할 수있는 일은 내용 만 포함 된 부분 템플릿을 만든 다음 머리글/바닥 글과없는 컨테이너 페이지 두 개를 만드는 것입니다. 그들은 둘 다 부분을 포함합니다. 그런 다음 JS를 사용하여 링크를 수정하십시오. 다른 뷰를 가리켜 야하는데, 다른 템플리트를 호출하는 것은 ... 많은 일처럼 보입니다. 더 좋은 방법이있을거야?


@ZeissS :

이 같은

뭔가 장고에 수 없습니다 :

{% if not iframe %} 
    {% extends "layouts/default.html" %} 
{% endif %} 

{% extends %} 태그 따라서는 할 수 없다, 템플릿의 첫 번째 태그해야합니다 조건부로 주석 처리했다. 아마 레이아웃 자체에서 그걸 할 수있을 것 같아요. 그리고 나서 모든 페이지에 적용될 것입니다 .... 시도해 봅시다.

+2

(나는 장고를 모른다.) 하나의 뷰를 유지하면서 머리말/꼬리말을 바깥으로 옮기고 포함 매개 변수 주위에'if'를 만들어서 쿼리 매개 변수를 확인한다. 여러 개의 뷰/사원을 만들 필요는 없습니다. – ZeissS

답변

1

: 이렇게 http://docs.djangoproject.com/en/1.2/ref/templates/api/#writing-your-own-context-processors

는 조건부 템플릿에서 if 문 사용하여 제공 할 수있다.

아마 가장 우아한, 당신은 여전히 ​​필요에 따라 래퍼를 사용할 수 있습니다.

확장 기능을 제공하지만 제공된 변수를 기반으로하는 조건부 템플릿 태그와 결합 할 수 있습니다. (복제 기능을 확장 할 수 있는지 확실하지 않아 기능을 확장 할 수 없습니다.)

http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/#writing-custom-template-tags

다른 옵션은 장고의 {% include %} 태그를 사용하는 것입니다, 당신은 문 경우에 사용하는 것을 포장 할 수 있습니다.

+0

필자는 또 다른 문제점 때문에 확장 기능을 복제하려고 시도했습니다. 쉬운 일이 아닙니다. 컨텍스트 프로세서를 사용하는 것도 잘 작동합니다. – mpen

+0

그래, 나는 놀랐다. 확장은 다소 독창적입니다. 그러나 확장 코드를 살펴보면 변수 확장이 필요합니다. 따라서 조건부로 변수를 변경하고 최소한의 템플릿이나 완전한 템플릿으로 확장 할 수 있습니까? –

+0

조건부로 확장해도 문제를 해결할 지 확신 할 수 없습니다 ... 실제로는 그렇지 않을 것이라고 확신합니다. 글쎄, 조건부로 * 다른 * 템플릿을 선택하지 않는 한. 그러나 실제로 레이아웃의 모든 ''을 원하며 머리글과 바닥 글은 필요하지 않습니다. 여기에 확장 노드를 확장하는 방법에 대한 몇 가지 논의가있었습니다. http://stackoverflow.com/questions/3209715/how-to-make-a-template-extend-another-one/3385098#3385098 관심이 있다면 – mpen

1

항상 GET 매개 변수를 전달하고 다른 템플릿을로드하거나 템플릿 자체를 변경할 수 있습니다. example.com/some/view/?show_simple=yes 같은 일부 URL에 대한

:

show_simple = request.GET.get('show_simple', False) 

if show_simple: 
    # return minimal template 
# return regular template 
+0

'show_simple'에 실제로 값이 주어지지 않았 으면'request.GET.get ('show_simple', False)'이 반환하는 것은 무엇인지 모르겠지만 사실이어야합니다. 따라서, 나는''show_simple '요청으로 생각합니다 .GET'이 더 효과적입니다. 당신은 솔루션에 가깝지만, 여전히 두 개의 다른 템플릿이 필요합니다 ... 템플릿에'show_simple'을 전달하고 로직을 수행하는 것이 좋습니다. – mpen

0

이 레이아웃 조건부 헤더 바닥 글을 포함하도록 수정하여 ...

{% if not iframe %} 
    <div id="header"> 
     ... 
    </div> 
    {% endif %} 

그리고 단지 {'iframe':'iframe' in request.GET}을 템플릿에 전달하십시오. 빌라! 거의 그렇게 나쁘지 않을 것 같았습니다. 당신이 당신의 자신의 상황에 맞는 프로세서를 쓸 수 기준으로 브라이언의 마크의 답변을 사용

관련 문제