2012-11-09 4 views
2

주요 질문은 프로그래밍 방식으로 내용을 넣을 블록을 선택하는 방법입니다. 다음은 다른 프로젝트에서 작동하지만 새로운 프로젝트에서는 작동하지 않습니다 몇 가지 이유. 두 프로젝트 모두 동일한 머신에서 같은 (기본) 템플릿 컨텍스트 프로세서를 사용하고 있습니다.Django 템플릿 {% block %} 태그에서 변수 사용

나는이

... 
{% block Title %}<h1>Whoo</h1>{% endblock %} 

{% block Content %}<p>Hi there</p>{% endblock %} 
... 

같은 그리고이

{% extends "base.html" %} 
... 
{% block myblock.name %} <p> {{ myblock.content }} </p> {% endblock %} 

<p> {{ myblock.name }} </br> {{ myblock.content }} </p> 
... 

같은 확장 템플릿 내가 얻을 것으로 예상

myblock = { 'name': 'Title', 'content': 'stuff' } 
return render_to_response('extended.html', {'myblock': myblock}, context_instance=RequestContext(request)) 

같은

로 렌더링을가는 기본 템플릿이 첫 번째 프로젝트를 시작하십시오.

... 
<p> stuff <p> 
<p>Hi there</p> 
<p> Title </br> stuff </p> 
... 

그러나 두 번째 프로젝트에 나는 얻을

... 
<h1>Whoo</h1> 
<p>Hi there</p> 
<p> Title </br> stuff </p> 
... 

그래서 두 번째 프로젝트에서 myblock의 DICT가 전달되고 템플릿에 의해 처리하지만 것으로 보인다 {% 블록 myblock.name의 myblock.name %}는 변수가 아닌 리터럴로 해석됩니다. 장고가 {% block %} 태그 안의 변수를 평가하도록하는 방법에 대한 아이디어가 있습니까?

+0

첫 번째 예와 같이 작동합니다. 두 프로젝트에서 코드가 동일하다고 확신합니까? – j0ker

+0

Checked checked and rechecked :( – kalhartt

답변

1

template inheritance에 대한 문서를 다시 한 번 살펴보십시오.

... 블록 태그 정의하는 [...] 블록 그 아이 템플릿에 을 채울 수 있습니다. 모든 블록 태그는 아이 템플릿 템플릿의 그 부분을 무시할 수있는 템플릿 엔진을 얘기하는 것입니다 않습니다 .

그러나보기에서 블록에 직접 변수를 할당하지 마십시오.

그리고 {% block myblock.name %}도 이상하게 보입니다.

당신은 내가 템플릿 오히려 당신이 심지어 render 바로 가기를 사용하여 일을 단순화 할 수 장고의 최신 버전을 사용하는 가정이

{% extends "base.html" %} 
{% block Title %}<p>{{ myblock.content }}</p>{% endblock %} 

과 같아야합니다라고 말하고 싶지만 기대하고 결과를 수신하려면 보기에 :

:

return render(request, 'extended.html', {'name': 'Title', 'content': 'stuff'}) 

이 같은 템플릿으로 이어질 것이다

{% extends "base.html" %} 
{% block Title %}<p>{{ content }}</p>{% endblock %} 
+0

내 콘텐츠가 들어갈 블록을 하드 코딩하지 않기를 원합니다. 그래서 5 개의 다른 블록이 있으면 어떤 블록을 어떤보기 기능에서 사용할 지 선택할 수 있습니다. – kalhartt

+1

그렇다면, 아마도 템플릿 태그로 변합니다 ... – arie

관련 문제