Передача параметра через URL-адрес через цикл

Итак, я пытаюсь передать имя PDF-файла в URL-адрес, чтобы представление могло отображать соответствующий PDF-файл.

urls.py

path('show-invoice/<str:invoice>', views.pdf_view, name  = "pdfview")

views.py

def pdf_view(request, invoice):
    invoicename = Laptop.objects.get(invoice=invoice)
    invoicename = invoicename.invoice
    pdfpath = settings.MEDIA_ROOT + invoicename
    pdfpath = pdfpath.replace('/', '\\')
    try:
       return FileResponse(open(pdfpath, 'rb'), content_type='application/pdf')
    except FileNotFoundError:
       raise Http404()

models.py

invoice = models.FileField(default='default.pdf', upload_to='uploads/')

invoice_list.html

<h2>View invoices</h2>
{%for i in invoices%}
<ul>
   <li>
       <a href = "{%url 'laptops:pdfview' invoice=i.invoice%}"> {{i.invoice}} </a>
   </li>
</ul>
{%endfor%}

Теперь у меня вопрос: почему он работает, когда я использую invoice='default.pdf', а не когда я использую invoice=i.invoice? Я получаю следующую ошибку

NoReverseMatch at /invoices/
Reverse for 'pdfview' with keyword arguments '{'invoice': 'uploads/default1.pdf'}' not found. 1 pattern(s) tried: ['show\\-invoice\/(?P<invoice>[^/]+)$']
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку преобразователь str, который вы использовали в пути, не соответствует \ в атрибуте счета-фактуры.

Вместо этого вы можете использовать конвертер path:

path('show-invoice/<path:invoice>', ...)

Ух ты. Никогда бы не заметил этого. Спасибо, Даниэль!

Reez0 24.03.2018 20:30

Другие вопросы по теме