2011-11-04 5 views
0

나는 장고에 대해 아주 새로운데, 나는 간단한 문제가있다. 당신이 내가이 문제를 해결하도록 도와 주길 바래. 나는이 기본 템플릿을 가지고있다.django 기본 템플릿의 날짜 표현

<!doctype html> 
<html> 
<head> 
<title>{% block title %} {% endblock %}</title> 
<link type="text/css" rel ="stylesheet" href="style.css" /> 
<script type="text/javascript" src="jquery.js"> </script> 
</head> 
<body> 
{% block navmenu %} 
{% endblock %} 
{% block content %} 
{% endblock %} 
{% block footer %} 
{% endblock %} 
</body> 
</html> 

이 템플릿이 같은 구조를 가지고 일부 중간 템플릿에 의해 확장되는 동안,

{% extends "base.html" %} 
{% block navmenu %} 
<ul> 
<li>Home</li> 
<li>Programming</li> 
<li>About</li> 
<li>Contact</li> 
</ul> 
{% endblock %} 
{% block footer %} 
<h4>Copyright &#169, {{year}} Mel Gibson </h4> 
{% endblock %} 

내 생각이 중간 템플릿을 확장 다른 템플릿을 렌더링하는 동안이 템플릿 모두가 앞으로 매우 똑바로 봐 . 나는 여기에 간단한 문제가있다. 바닥 글이라는 블록에는 연도라는 변수가 있습니다. 이것은 페이지 밖에서도 일정해야합니다. 따라서 문맥에서이 변수를 계속 전달하면 중복성이 생깁니다.이 날짜를 렌더링하는 가장 쉬운 방법은 무엇입니까? 코드 밖으로 한 번만 전달됩니다. html 파일 자체에 datetime 객체를 가져오고 표시 할 동일한 템플릿 내에서 year 필드를 빌드 할 수 있습니까?

답변

2

이것은 context processors을위한 것입니다.

+0

일반 뷰를 사용하여이 작업을 수행 할 수 있다고 생각합니다. 어떻게 생각하십니까? – Sandeep

1

내가 이걸 곧바로 볼 수 있겠는가? 올해는 항상 올해가되어야 하는가? 정적 텍스트뿐만 아니라, 대신에 그것을 작성 했으므로, 맞습니까?

변수로 전달하지 않으려면 custom template tag을 대신 사용할 수 있습니다.

다른 모든 뷰 클래스가 상속하는 기본 뷰 클래스를 생성하고 일반적으로 사용 된 템플릿 변수 (예 : 연도)를 추가 할 수 있습니다.

+1

를하지만해야 모든 클래스 내에서 동일한 변수를 반환합니까? 템플릿으로 파이썬 가져 오기 및 다른 계산을 할 수 있습니까? – Sandeep

+0

@ insane-36 프로젝트에 몇 가지 기본 클래스가 있었고, 많은 변수가 추가 된 많은 믹스 인이있었습니다. 함수를 오버라이드 (override) 할 때'super (..., self) .xxx()'를 호출하는 것을 기억한다면 문제가되지 않습니다. –

+0

나는이 문제를 해결하기위한 좋은 접근법을 발견했다. 고맙습니다. – Sandeep

1

장고이 사용 사례에 대한 지원 솔루션이 있습니다 RequestContext

+0

고맙습니다. 나는 그것을 작동하게 만들었습니다 ... – Sandeep