Невозможно просмотреть статические файлы на шаблоне
Этот проект работает, но не удается просмотреть загруженные файлы в шаблоне upload.html. Он хранит загруженные файлы в папке control _ static, все работает нормально, но когда я нажимаю на просмотр файла в шаблоне upload.html, он не отображает загруженный файл. Пожалуйста, помогите мне решить эту проблему. Пожалуйста
приложение USERMASTER:
views.py:
def control_upload(request):
if request.method == 'POST':
form = ControlForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['control_uploadfile'])
model_instance = form.save()
model_instance.save()
else:
form = ControlForm()
controlmachiness = Controlmachine.objects.all()
return render(request,'usermaster/control_uploadfile.html',{'form':form,'controlmachiness':controlmachiness})
def handle_uploaded_file(f):
with open('usermaster/control_static/control_files/'+f.name, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
def control_index(request):
controlmachines = Controlmachine.objects.all()
return render(request,"usermaster/control_show.html",{'controlmachines':controlmachines})
def control_destroy(request, id):
controlmachine = Controlmachine.objects.get(id=id)
controlmachine.delete()
return HttpResponseRedirect('/usermaster/controlfile/')
def upload(request):
cmachines = Controlmachine.objects.all()
return render(request,'usermaster/upload.html',{'cmachines':cmachines})
def save_machine(request):
if request.method == "POST":
machine_name = request.POST.get('machinename', '')
operation_no = request.POST.get('operationname','')
choiced_cmachine = Controlmachine.objects.filter(machine_name=machine_name, operation_no=operation_no)
cmachines = Controlmachine.objects.all()
return render(request,'usermaster/upload.html',{'cmachines':cmachines,'choiced_cmachine':choiced_cmachine})
models.py:
class Controlmachine(models.Model):
machine_name = models.CharField(max_length=100)
operation_no = models.IntegerField()
control_uploadfile = models.FileField(upload_to='control_files/')
class Meta:
db_table = "controlmachine"
forms.py:
class ControlForm(forms.ModelForm):
class Meta:
model = Controlmachine
fields = ['machine_name', 'operation_no', 'control_uploadfile'] #https://docs.djangoproject.com/en/3.0/ref/forms/widgets/
widgets = { 'machine_name': forms.TextInput(attrs={ 'class': 'form-control' }),
'operation_no': forms.TextInput(attrs={ 'class': 'form-control' }),
'control_uploadfile': forms.ClearableFileInput(attrs={ 'class': 'form-control' }),
}
Templates/usermaster/:
control_uploadfile.html:
{% extends "usermaster/home.html" %}
<html>
<head>
<title>Control File Upload</title>
</head>
{% block body %}
<body>
<p><h1>Control File Upload</h1></p>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button> <br><br>
</form>
</body>
{% endblock %}
</html>
upload.html:
{% extends 'dashboard/user_home.html' %}
{% block body %}
{% load control_static %}
<body>
<form action="{% url 'usermaster:save_machine' %}" method="post">
{% csrf_token %}
<label for="machinename">Select Machine Name:</label>
<select class="form-control form-control-md" name="machinename" id="machinename">
{% for machine in cmachines %}
<option value="{{ machine.machine_name }}">{{ machine.machine_name }}</option>
{% endfor %}
</select>
<br>
<br>
<label for="operationname">Select Operation Number:</label>
<select class="form-control" id="operationname" name="operationname">
{% for machine in cmachines %}
<option value="{{ machine.operation_no }}">{{ machine.operation_no }}</option>
{% endfor %}
</select>
<br>
<br>
<br>
<input class="btn btn-info" type="submit" value="Save">
</form>
<br>
<br>
<table class="table table-bordered table-dark width=50%">
<thead>
<tr>
<th scope="col">Machine Name</th>
<th scope="col">Operation Number</th>
<th scope="col">File</th>
</tr>
</thead>
<tbody>
<tr>
{% for choice in choiced_cmachine %}
<td>{{choice.machine_name}}</td>
<td>{{choice.operation_no}}</td>
<td>
{% for file in cmachines %}
<a class="btn btn-info" href="{% control_static 'usermaster/{{file.control_uploadfile}}' %}">view file</a>
{% endfor %}
</td>
{% endfor %}
</tr>
</tbody>
</table>
{% endblock %}
</body>
</html>
urls.py:
app_name = 'usermaster'
urlpatterns = [
path('controlfile/',views.control_index,name='control_index'),
path('cdelete/<int:id>',views.control_destroy),
path('controlupload/',views.control_upload,name='control_upload'),
path('upload/',views.upload,name='upload'),
path('save',views.save_machine,name='save_machine'),
]
urls.py:
urlpatterns = [
]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
settings.py:
STATIC_URL = 'control_static/'
STATIC_ROOT=os.path.join(BASE_DIR,'control_static')
ROOT_PATH = os.path.dirname('control_static')
STATICFILES_DIRS = [os.path.join(ROOT_PATH,'usermaster')]
вызовите представление из файла upload.html
UPLOAD.HTML:
<a class="btn btn-info" href="{% url 'APPNAME:pdf_view' %}">view file</a>
views.py:
from django.http import FileResponse, Http404
from django.contrib.staticfiles.storage import staticfiles_storage
pdf_url = staticfiles_storage.url('YOUR_PDF_NAME.csv')
def pdf_view(request):
try:
return FileResponse(open('pdf_url', 'rb'), content_type='application/pdf')
except FileNotFoundError:
raise Http404()