2009-07-01 5 views
2

좋은 작은 코더와 마찬가지로 모든 장고 템플릿은 base.html에서 상속받습니다. 이제는 재미있는 것을 보여주기 위해베이스에 몇 가지 기능을 추가하고 싶습니다. 등Django의 모든보기에서 어떤 템플릿으로 데이터를 전달할 수 있습니까?

일부 사용자 통계, 또는 임의의 게시물 또는 피드, 내 모든 뷰는 다음과 같습니다 :

def viewname(request) : 
    template_vales = {} 
    // Stuff 
    return render_to_response('some_file_name.html', template_values) 

가 어떻게 template_values의 값은 항상 내 모든 뷰의 배치되었는지 있도록 할 수 있습니다 ? 나는 모든 견해의 시작에서 이것을해야합니까? 예 :

import utils 

def viewname(request) : 
    template_values = {} 
    utils.addDefaults(template_values) 
    // Stuff 
    return render_to_response('some_file_name.html', template_values) 

더 좋은 방법이 있습니까?

답변

9

에게 당신은 상황에 맞는 프로세서를 사용한다 : 내 settings.py에서

http://docs.djangoproject.com/en/dev/ref/templates/api/

http://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/

을, 나는 (마지막 두 참조) 표준들에 기능 몇 가지를 추가

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request", 
    "django.core.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "thetrailbehind.context_processors.canonical_url", 
    "thetrailbehind.context_processors.gmapkey",) 

내가 추가하는 첫 번째 것은보기에 대한 표준 URL을 정의하고 두 번째는 GMap 키 사이를 전환합니다. 이 함수는 다음과 같습니다.

def gmapkey(request): 
    url = request.META['HTTP_HOST'] 
    key = "" 
    if url == "127.0.0.1:8000": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBTpH3CbXHjuCVmaTc5MkkU4wO1RRhTaJZRNQLjBhGtJlm6eE4gJtku-Rw" 
    elif url == "192.168.11.3:8000": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBTm8-wcGRt2V-0p00qdRdGeyDhtGBSRTbk2s1ciA8vzdxGeAnqq6g-F4g" 
    elif url == "192.168.11.17:7000": 
    key="ABQIAAAAmHGaJpkZhJ6huJ93yfaYERTmT93Y0kqi8UE3J2QowoLz6rHdtxTHqeJ0nRoENl5LY5gCqHhRK9Yasg" 
    elif url == "192.168.1.200:8000": 
    key="ABQIAAAAmHGaJpkZhJ6huJ93yfaYERR5_sKpsr8Ui4YjC4HGOe8xaUDeVhSxGV1r1rIL1OvmVMAGUQBoUK0H2w" 
    elif url == "192.168.1.73:8000": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBR7_CRKSBu49YjvDOLq_-DZQHSIYBSip9sO5IHlFIoZMtDpVcduFQCnWg" 
    elif url == "www.trailbehind.com": 
    key="ABQIAAAAGFSvsJjnPmsGb7IcfqoamBQxFGSDsNggDdRtUnAb8L8sJ910FhSKwoOpNaUlGCQIhyl6Dy5Cbyb0lQ" 
    elif url == "dev.trailbehind.com": 
    key="ABQIAAAAmHGaJpkZhJ6huJ93yfaYERQzqIbhF_xOwOwM1oDO_kQqYhag7BRsoTInq2lBuE7fsgDN2xfyD2IL5A" 
    elif url == "trailbehind.com": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBQL9YYTGyB2pLTiscy54DOfsaXeHBQqMBmq7UvWAZVenmRMtNr_bo3TMQ" 
    elif url == "tenuki.trailbehind.com": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBQ5SkJUKVREyqcvaNQJsRscGi2yVhSj0mJSTasDiWec8Awxb_TUxOdElw" 
    elif url == "cabin.trailbehind.com": 
    key = "ABQIAAAAmHGaJpkZhJ6huJ93yfaYERSU-76xxg1tvy-8taAiiF1qqcGi1xSmjUhmAs_v2XAuGxKX_Y-4-gDP3Q" 
    elif url == "ec2-174-129-167-234.compute-1.amazonaws.com": 
    key = "ABQIAAAAmHGaJpkZhJ6huJ93yfaYERStHq7nubctzsNDgkYc34LoSNrRNhQVCNy2KFFm2BT1sG2yrXrw38ycNg" 
+0

그래서 내가 필요합니다. django.template 수입 RequestContext 및 반환에는 render_to_response ("을 my_app/my_template.html", { 'some_var': 'foo는'}, context_instance = RequestContext (요청)) 모든보기에 ? 튜토리얼을 통해 저의 길을 시작했으면 좋겠습니다. 감사! –

+0

그래, 여기 내보기 기능 중 하나입니다 : 데프 parks_by_state (요청) : '' 상태 = EncodedState.objects.all() PAGE_TITLE = '공원지도 국가에 의해' '모든 국가에 대한 다각형지도' ' response_dict = {'상태 'make_json_states (미국), 'PAGE_TITLE 'PAGE_TITLE} 복귀에는 render_to_response ("state_map.html" response_dict, context_instance = RequestContext (요청)) –

4

이 경우 컨텍스트 프로세서를 사용합니다. 예를 들어, 내가 원하는 경우 각 뷰에 대한 변수 MEDIA_URL를 얻을,이 같은 context_processors.py을 정의 : settings.py에서

def media_url(request): 
    from django.conf import settings 
    return {'MEDIA_URL': settings.MEDIA_URL} 

당신이보기에

TEMPLATE_CONTEXT_PROCESSORS = (
    .... 
    'django.core.context_processors.request', 
    'myaplication.context_processors.menuitems', 
) 

이 있어야합니다 당신이 render_to_response 예를 들어 context_instance=RequestContext(request) 이 있어야합니다 :

def my_view(request): 
return render_to_response('base.html',{}, 
           context_instance=RequestContext(request))