Как отобразить несколько загруженных файлов в шаблоне
Здравствуйте, я новичок в Django. Это загрузка нескольких файлов с моделями данных. Этот код работает, но данные не отображаются в шаблоне. Пожалуйста, подскажите, как показать несколько загруженных файлов на шаблоне и отобразить эти файлы в виде таблицы. Я пробовал так много раз. Пожалуйста, дайте мне решение.
view.py:
def create_to_feed(request):
user = request.user
if request.method == 'POST':
machineform = MachineForm(request.POST)
form = FeedModelForm(request.POST)
file_form = FileModelForm(request.POST, request.FILES)
files = request.FILES.getlist('file') #field name in model
if form.is_valid() and file_form.is_valid():
feed_instance = form.save(commit=False)
feed_instance.user = user
feed_instance.save()
for f in files:
file_instance = FeedFile(file=f, feed=feed_instance)
file_instance.save()
return render(request,'usermaster/multipleupload.html',{'machineform':machineform,'form':form,'file_form':file_form,'user':user,'files':files})
else:
machineform = MachineForm()
form = FeedModelForm()
file_form = FileModelForm
machine = Machine.objects.all()
return render(request,'usermaster/multipleupload.html',{'machineform':machineform,'form':form,'file_form':file_form,'user':user,'machine':machine})
urls.py:
urlpatterns = [
path('admin/', admin.site.urls),
path('multipleupload/', views.create_to_feed),
]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
models.py:
class Machine(models.Model):
machine_name = models.CharField(max_length=200)
operation_no = models.IntegerField()
def __str__(self):
return self.machine_name
class Feed(models.Model):
user=models.ForeignKey(Machine, on_delete=models.CASCADE)
text=models.IntegerField()
class FeedFile(models.Model):
file = models.FileField(upload_to="documents/")
feed = models.ForeignKey(Feed, on_delete=models.CASCADE)
forms.py:
from django import forms
from usermaster.models import Feed, FeedFile, Machine
class MachineForm(forms.ModelForm):
class Meta:
model = Machine
fields = '__all__'
from django.forms import ClearableFileInput
...
class FeedModelForm(forms.ModelForm):
class Meta:
model = Feed
fields = ['text']
class FileModelForm(forms.ModelForm):
class Meta:
model = FeedFile
fields = ['file']
widgets = {
'file': ClearableFileInput(attrs={'multiple': True}),
}
admin.py:
from django.contrib import admin
from .models import Machine
from django.contrib import admin
from .models import Feed,FeedFile
#Register your models here:
admin.site.register(Machine)
class FeedFileInline(admin.TabularInline):
model = FeedFile
class FeedAdmin(admin.ModelAdmin):
inlines = [
FeedFileInline,
]
admin.site.register(Feed, FeedAdmin)
multipleupload.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method="post" action="/multipleupload" enctype="multipart/form-data">
{% csrf_token %}
{{machineform}}
<button type="submit">Save</button>
</form>
</body>
</html>
Вы можете использовать цикл for в HTML вашего шаблона. Например:
{% for file in file_form%}
<a> {{ file.file}} </a>
{% endfor %}
и вы можете прочитать это Как загрузить файл в Django?