Django build_absolute_uri бросает ошибку NoReverseMatch

Попробовали множество связанных решений, ранее размещенных здесь, без каких-либо последствий. Я, очевидно, что-то пропустил. Я использую Django 1.4. У меня есть процесс, который генерирует случайное число jpeg файлов. Я пытаюсь создать комбинацию views/template/templatetags, которая позволит мне динамически отображать изображения. Никаких моделей не задействовано. Использовал идею фильтра templatetag от Lois Di Qual

В файле 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

Urls:

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'),
)
</fn>

*-Редактировать-*

Выслеживать:

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 ответ

Ну, я не нашел решения, почему это не работает, но я нашел решение, которое действительно работает. Надеюсь, это может помочь другим, или это может дать понять кому-то, почему оригинальный метод не удался.

Я внесла следующие изменения:

Шаблон:

{% for fn in jpg_names %}
{% endfor %}

URLS:

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'),)

Просмотры:

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

В основном это добавляет имя файла в тег img, затем удаляет имя файла в представлении, открывает его на сервере, считывает его в переменную, удаляет исходный файл и возвращает изображение. Это поведение, которое я хотел, я просто не понимаю, почему OP не сработал.

licensed under cc by-sa 3.0 with attribution.