2013-08-07 3 views
0

이전에 아무런 영향을 미치지 않은 수많은 관련 솔루션을 사용해 보았습니다. 나는 분명히 뭔가를 놓친다. 나는 장고 1.4를 사용하고있다. jpeg 파일을 무작위로 생성하는 프로세스가 있습니다. 나는 동적으로 이미지를 표시 할 뷰/템플릿/templatetags의 조합을 만들려고합니다. 관련된 모델이 없습니다.Django build_absolute_uri NoReverseMatch 오류가 발생했습니다

settings.py 파일에 적절한 TEMPLATE_CONTEXT_PROCESSORS가 설치되어 있습니다. 미리 감사드립니다.

템플릿 :

{% load mytemplatetags %} 
{% for fn in jpg_names %} 
    {{ fn|absolute_img_uri:request }} 
{% endfor %} 

템플릿 태그

from django import template 
from django.template.loader import render_to_string 
from django.core.urlresolvers import reverse 

register = template.Library() 

''' 
Usage: {{ fn|absolute_media_url:request }} 
''' 
@register.filter 
def absolute_img_uri(fn, request): 
    return request.build_absolute_uri(reverse("returnImage", kwargs={'fn':fn})) 

보기 :

def returnImage(request,**kwargs): 
path = "/opt/local/var/media/facstool/" 
fn = kwargs['fn'] 
img = open(str(path)+fn,'rb').read() 
response = HttpResponse(img,mimetype='image/jpeg') 
return response 

URL을 :

내가 가진 무엇

import ri.tools.views as rv 
urlpatterns = patterns('ri.tools.views', 
url(r'^$', 'index', name="index"), 
url(r'defineParameters','defineParameters',name='defineParameters'), 
url(r'downloadcsv','downloadcsv',name='downloadcsv'), 
url(r'downloadpdf','downloadpdf',name='downloadpdf'), 
url(r'downloadZipFile','downloadZipFile',name='downloadZipFile'), 
url(r'returnImage/(?P<fn>.*)',rv.returnImage,name='returnImage'), 
) 

* - 편집 - *

역 추적 :

NoReverseMatch at /tools/defineParameters 
Reverse for 'returnImage' with arguments '()' and keyword arguments '{'fn': u'Lep-_Clone12_Median__ss_293F_Median__ss_293F_H8_graph.jpg'}' not found. 
Request Method: POST 
Request URL: http://localhost:8000/tools/defineParameters 
Django Version: 1.4 
Exception Type: NoReverseMatch 
Exception Value:  
Reverse for 'returnImage' with arguments '()' and keyword arguments '{'fn': u'Lep-_Clone12_Median__ss_293F_Median__ss_293F_H8_graph.jpg'}' not found. 
Exception Location: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/urlresolvers.py in _reverse_with_prefix, line 396 
Python Executable: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python 
Python Version: 2.7.2 

답변

1

글쎄, 나는 그것이 작동하지 않는 이유에 대한 해결책을 찾을 수 없습니다,하지만 난 작업을 수행하는 솔루션을 찾았어요 . 다행히도 이것은 다른 사람들을 도울 수 있거나, 원래의 방법이 실패한 이유를 누군가에게 알 수 있습니다. 기본적으로이 img 태그에 파일 이름을 추가

def returnImage(request): 
    path = "/opt/local/var/media/facstool/" 
    _, fn = os.path.split(request.META['PATH_INFO']) 
    f = open(str(path)+fn,'rb') 
    img = f.read() 
    f.close() 
    os.remove(str(path)+fn) 
    response = HttpResponse(img,mimetype='image/jpeg') 
    return response 

:

템플릿 :

{% for fn in jpg_names %} 
    <img src="/tools/returnImage/{{ fn }}"> 
{% endfor %} 

URL이 :

urlpatterns = patterns('ri.tools.views', 
url(r'^$', 'index', name="index"), 
url(r'defineParameters','defineParameters',name='defineParameters'), 
url(r'downloadcsv','downloadcsv',name='downloadcsv'), 
url(r'downloadpdf','downloadpdf',name='downloadpdf'), 
url(r'downloadZipFile','downloadZipFile',name='downloadZipFile'), 
url(r'returnImage/.*','returnImage',name='returnImage'),) 

조회수

나는 다음과 같이 변경했다 , 그 다음 스트립 뷰에서 파일 이름을 끈 다음 서버에서 열어 변수로 읽어 들이고 원본 파일을 삭제하고 이미지를 반환합니다. 내가 원한 행동이기 때문에 OP가 왜 효과가 없었는지 이해할 수 없습니다.

관련 문제