뷰에서 플롯을 생성하고 템플릿 폴더에 플롯을 png로 저장했습니다. 그러나 <img>
템플릿 html 파일 의 태그를 사용하여이 저장된 이미지를 표시하려고 하면 이미지가 표시되지 않습니다. 다음은 내 폴더 구조의 이미지입니다. 폴더 구조
이것은 뷰 안에 내 플롯을 저장하는 방법입니다.
def result(request):
if request.POST and request.FILES:
mycsv=pd.read_csv(request.FILES['csv_file'])
c=mycsv.X
#We divide by the class height(basically) so that Xi+1-Xi=1
x = [d / 5 for d in c]
n=len(x)
b=mycsv.Y
divi=np.sum(b)
f = [e / divi for e in b]
#Thus sum(f)=1, makes calculation of mean simpler
#PLOTTING BEGINS
fig = plt.figure()
ax = plt.subplot(111)
ax.plot(x, f)
plt.title('Pearson Type 1 ')
ax.legend()
#plt.show()
fig.savefig('polls/templates/polls/plot.png')
context = {'n':n,}
return render(request, 'polls/result.html', context)
else:
return HttpResponse("Form Not Submitted")
이미지를 얻으려는 내 result.html 파일은 다음과 같습니다.
<h1>Graph with {{n}} points</h1>
<img src='./plot.png' />
내 로컬 호스트에서 실행하고 있는데 권한에 문제가 있습니까?
나는 방금 django를 배우기 시작했고 이것을 테스트하고 싶었습니다. 도와 주셔서 감사합니다!
귀하의 접근 방식에 대해 잘못된 점이 많이 있지만 재검토하고 싶을 수도 있지만 진행 방법에 대한 몇 가지 조언을 드릴 것입니다.
우선 파일을 templates 디렉토리에 저장하면 템플릿에서 사용할 수 없습니다 . templates 디렉토리는 Django의 템플릿 로더를 사용할 수있는 특수 구성이며 이미지와 같은 정적 파일을로드하지 않습니다.
이미지를 정적 파일에 저장하고 {% static %}
템플릿 태그를 사용하여 복구 할 수 있지만 이미지가 정적 콘텐츠가 아니기 때문에 동적으로 생성 되므로 잘못된 접근 방식 입니다.
이미지를 만든 후 이미지의 데이터를 사용할 수 없으므로 TempFile을 사용하여 임시 파일에 이미지를 저장 하거나 (충분한 경우) StringIO를 사용하여 메모리에 저장 한 다음 컨텍스트에서 해당 바이트를 다음과 같이로드하는 것이 좋습니다. base64
from StringIO import StringIO
import base64
img_in_memory = StringIO()
fig.savefig(img_in_memory, format="png") #dunno if your library can do that.
context['image'] = base64.b64encode(img_in_memory.getvalue())
그런 다음 템플릿에서 다음과 같은 작업을 수행합니다.
<img src="data:image/png;base64,{{image}}" />
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다