장고 템플릿을 사용하면 다른 템플릿을 포함하여 페이지를 작성할 수 있습니다. 이것은 전체 페이지를 렌더링하고 싶지만 AJAX를 사용하여 일부를 다시로드하고 모든 렌더링 논리를 javascript로 이동하지 않고 (또는 더 나쁜 경우 : javascript에서 복제하려는 경우) 특히 유용합니다. 다음과 같이 할 수있는 템플릿을 포함제한된 컨텍스트에 포함 된 django 템플릿에서 csrf_token을 사용하는 방법
:
{% include "template.html" %}
해당 템플릿이 다른보기에서 사용할 수있는 경우에는, 당신의 컨텍스트는 해당 템플릿에 대한 컨텍스트 단지 상위 아니다 가능성이 높습니다. 따라서 Django에서는 템플릿의 컨텍스트를 지정할 수도 있습니다.
템플릿이 다른 템플릿에 포함되어 렌더링 될 때 실수로 다른 동작이 발생하지 않도록하고 템플릿을 뷰의 기본 템플릿으로 렌더링 할 때 only
옵션을 사용하는 것도 의미가 있습니다. 상위 템플릿의 컨텍스트에 액세스하지 못하도록합니다.
그래서 내 이런 모습을 포함한다 :
{% include "sub_template.html" foo=sub_context.foo bar=sub_context.bar only %}
그러나, only
문제가 발생 것을 추가 : 나는 장고 제외 된 않는 숨겨진 마법의 일부를 추측하기 때문에 {% csrf_token %}
가 더 이상 해당 템플리트에 작동합니다.
장고 로그 오류가
UserWarning입니다, • {%의 csrf_token %}이 템플릿에 사용했지만, 컨텍스트는 값을 제공하지 않았다. 이것은 대개 RequestContext를 사용하지 않기 때문에 발생합니다.
상위 템플릿 는 RequestContext
로 렌더링하고, 상기 서브 템플릿을 포함 기본 템플릿으로 표현하고 있지 않은 경우, 에러가 발생하지 않는다.
이 문제의 가장 확실한 해결 방법은 only
옵션을 include
으로 사용하지 않는 것입니다. 이는 수치 스럽습니다. 이 문제를 해결하기위한 더 좋은 방법이 있습니까?