Django의 뷰에서 데이터를 템플릿으로 어떻게 전달할 수 있습니까?
-
21-08-2019 - |
문제
좋은 작은 코더처럼, 내 django 템플릿은 모두 base.html에서 상속됩니다. 이제 나는 항상 흥미로운 것들을 보여주기 위해베이스에 기능을 추가하고 싶습니다. 일부 사용자 통계, 임의 게시물, 피드 등
내 모든 견해는 다음과 같습니다.
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)
아니면 더 좋은 방법이 있습니까?
해결책
컨텍스트 프로세서를 사용해야합니다.
http://docs.djangoproject.com/en/dev/ref/templates/api/
http://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/
내 settings.py에서 표준에 몇 가지 기능을 추가합니다 (마지막 두 가지 참조).
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",)
첫 번째 I가 추가하는 것은보기의 표준 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"
다른 팁
이를 위해 컨텍스트 프로세서를 사용합니다. 예를 들어, 변수를 얻으려면 MEDIA_URL
각보기에 대해 정의합니다 context_processors.py
이와 같이:
def media_url(request):
from django.conf import settings
return {'MEDIA_URL': settings.MEDIA_URL}
안에 settings.py
당신은 있어야합니다
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))