2011-08-22 2 views
2

외부 웹 사이트에서 네 개의 HTML 조각을 가져와 내 장고 사이트의 머리글과 바닥 글에 표시해야합니다. 나는 확실히 이들을 일정 시간 동안 캐시 할 필요가있다.django 템플릿에서 사용하기 위해 html 조각 읽기 및 캐싱

나의 초기 생각은 urllib2를 사용하여 http를 읽고 html을 내 서버에 파일로 작성하는 것이 었습니다. Django 컨텍스트 프로세서를 통해 구현 된이 코드는 네 개의 파일의 타임 스탬프를 확인하고 필요에 따라 업데이트 된 버전을 검색 한 다음 템플릿 변수로 읽어들입니다.

네 개의 파일 중 하나에 대해 Django의 템플릿 변수 크기를 초과하는 것으로 보입니다. 이로 인해 readlines()를 사용하고 해당 파일을 배열로 템플릿에 전달해야했습니다.

외부 사이트에서 네 개의 HTML 조각을 가져 와서 캐시하고 내 서식 파일로 전달하는 좀 더 우아한 방법이 있습니까?

여기 내 base.html 템플릿 지금의 모습입니다 :

{{ integration_prehead|safe }} 
<head> 
{{integration_head|safe }} 
... 
</head> 
{% for l in integration_topper %}{{ l|safe }}{% endfor %} 
{{ block content }}{{ endblock content }} 
{{ integration_footer|safe }} 

prehead.html는 문서 타입 및 열기 HTML 태그 이외의 많은 부분이 아니다. head.html은 많은 자바 스크립트 및 스타일 시트입니다. topper.html과 footer.html은 가장 큰 부분이며 페이지의 상단과 하단입니다. 특히 토퍼는 매 15 분마다 변경 될 수 있으므로 템플릿에 하드 코딩하는 것은 실용적이지 않습니다.

토퍼가 39k로 너무 커서 단일 Django 템플릿 변수를 읽을 수 없으므로 for 루프를 읽습니다.

+0

Html fragment가 사이트의 일부가 아닙니다. 어떻게 내부 템플릿 시스템의 도움으로 외부 HTML을 캐싱 할 수 있습니까? 당신의 질문이 맞습니까? 예를 들어주세요. – sergzach

+0

하지만 흥미 롭습니다. +1. – sergzach

+0

감사합니다. 좀 더 자세한 내용을 제공하기 위해 제 질문을 수정했습니다. – wmfox3

답변

0

조각을 가져 오는 서버를 제어 할 수 있다면 가장 좋은 방법은 전체 HTML 문서가 아닌 조각 만 반환하는 전용보기를 설정하는 것입니다.

그런 다음 Django보기를 사용하여 수동으로 조각을 디스크에 저장하거나 Django's Cache framework을 사용할 수 있습니다. 캐시 프레임 워크는 훨씬 강력하고 데이터베이스 또는 memcached와 같은 추가 저장 수단을 제공하지만 정의 된 기간 동안 조각을 저장할 수있는 것은 아닙니다. 예를 들어, 서버를 재시작해야한다면 memcached는 모든 것을 잃게됩니다.

원본 서버가 제어 할 수없는 경우 먼저 HTML 파서를 통해 문서를 실행하고 필요한 부분 만 템플릿에 전달하는 것이 좋습니다. BeautifulSoup은 파이썬을위한 훌륭한 도구입니다.

+0

고마워, 크리스. 외부 서버는 html 문서를 네 가지 구성 요소로 나눕니다. 위 질문에 대한 추가 설명을 추가했습니다. 장고보기 및 장고 캐시 프레임 워크 사용에 대한 귀하의 생각을 좋아합니다. 조각을 호출하고 캐시하는 네 가지보기를 제안 하시겠습니까? 이것들은 내 사이트의 모든 페이지에서 필요하므로이 네 가지 견해는 어떻게 연관되어 있습니까? – wmfox3

관련 문제