Исправление отсутствия обратного соответствия в проекте Django
Я получаю следующую ошибку: Reverse for 'order_pdf' with arguments '('',)' not found. 1 pattern(s) tried: ['business_plan/(?P<id>[0-9]+)/pdf/$']
Я не уверен, в чем именно причина этого.
Вот модель:
class Info(models.Model):
logo = models.ImageField(default='report-cover.jpg', null=True, blank=True)
date_posted = models.DateTimeField(default=timezone.now)
name = models.CharField(null=True, blank=True, max_length=100)
Вот views.py
def order_pdf(request, info_id):
info = get_object_or_404(Info, id=info_id)
html = render_to_string('businessplan/pdf.html', {'info': info})
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'filename="{}-Business Plan.pdf"'.format(info.businessName)
weasyprint.HTML(string=html, base_url=request.build_absolute_uri()).write_pdf(response,
stylesheets=[weasyprint.CSS(settings.STATICFILES_DIRS[0] + '\css\\report.css')], presentational_hints=True)
return response
Вот urls.py
app_name = 'businessplan'
urlpatterns = [
path('<str:info_id>/pdf/', order_pdf, name='order_pdf'),
]
Вот шаблон:
<a href="{% url 'businessplan:order_pdf' Info.id %}">
Я пробовал изменить info_id
на id
, но это не помогло.
Какова причина этой ошибки?
Похоже, что <a href="{% url 'businessplan:order_pdf' Info.id %}">
не работает, потому что вы не передаете его в контекст шаблона.
В результате вызов не работает, поскольку Info.id
является пустой строкой (ср. https://docs.djangoproject.com/en/3.2/ref/templates/api/#invalid-template-variables), что нарушает логику реверсирования URL.
Для того чтобы это работало, вы должны передать свой экземпляр info в контекст шаблона, например, так:
return render(
request,
'businessplan/businessplan.html',
{
'form': form,
'successful_submit': False,
"Info": info_instance
}
)