#python #django #download
#python #django #Скачать
Вопрос:
то, что я пытаюсь сделать, это:
- Администратор загружает PDF-файл из панели администратора. (1)
- Он должен перейти к указанному шаблону. (2)
- И его следует загрузить, нажав кнопку загрузки в шаблоне.
Итак, вот коды:
(1)
class Reports(models.Model):
name = models.CharField(max_length=100, null=False, blank=False, verbose_name="File Name")
report = models.FileField()
(2)
<tr>
<td>"File Name must be showed in here"</td>
<td class="text-center">PDF</td>
<td class="text-center lang-tr-src"><a href="What way should i give here?" target="_blank"><i class="fas fa-file-download"></i></a></td>
<td class="text-center lang-en-src"><a href="" target="_blank"><i class="fas fa-file-download"></i></a></td>
</tr>
На веб-сайте будет один отчет за каждый месяц. Я хочу перечислить их в шаблоне и сделать их загружаемыми.
Должен ли я написать представление для этого (если да, как это должно быть?) Или что мне делать?
Ответ №1:
Все данные, которые вы хотите отобразить в своем шаблоне, вам нужно записать в свой views.py , так что этот случай настолько специфичен.
views.py:
def your_view_name(request):
reports = Reports.objects.all()
context = {
'reports': reports
}
return render(request, 'your_template.html', context)
Затем создайте URL-адрес для вашего представления в urls.py
urlpatterns = [
path("", views.your_view_name, name='your_url_name')
]
Ваш шаблон:
<tr>
{% for obj in reports %}
<td>{{ obj.name }}</td>
<td class="text-center">PDF</td>
<td class="text-center lang-tr-src"><a href="{{ obj.report.url }}" Download
target="_blank"><i class="fas fa-file-download"></i></a></td>
<td class="text-center lang-en-src"><a href="" target="_blank"><i
class="fas fa-file-download"></i></a></td>
{% endfor %}
</tr>
Комментарии:
1. Вызов переменных в шаблоне из представления использует
{{ v }}
не{% v %}
2. @Moha369 да, я отвлекся, спасибо за ваш отзыв.
Ответ №2:
сначала создайте новое представление.
def report_view(request):
context = {}
reports= Reports.objects.all()
context['reports'] = reports
return render(request, "pages/report.html", context)
создайте URL-адрес для этого представления в urls.py
path('reports', report_view, name='report_view'),
в вашем шаблоне создайте forloop для этого контекста, как показано ниже:
{% for report in reports %}
<tr>
<td>"File Name must be showed in here"</td>
<td class="text-center">PDF</td>
<td class="text-center lang-tr-src"><a href="report.report " target="_blank"><i class="fas fa-file-download"></i></a></td>
<td class="text-center lang-en-src"><a href="" target="_blank"><i class="fas fa-file-download"></i></a></td>
</tr>
{% endfor %}