python - django文件上传问题
问题描述
我尝试使用 Django 文件字段上传图片
在我的models.py文件中
class Students(models.Model):
id = models.AutoField(primary_key=True)
admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
gender = models.CharField(max_length=255)
profile_picture = models.FileField()
objects = models.Manager()
在项目的urls.py文件中
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('student_management_app.urls')),
]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)+static(settings.STATIC_URL,document_root=settings.STATIC_FILE_ROOT)
在我的setting.py文件中,我指定了这样的目录
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
STATIC_URL = '/static/'
STATIC_FILE_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
在模板页面中,我尝试查看上传到媒体文件夹的图像
<tbody>
{% for student in students %}
<tr>
<td>{{ student.admin.id }}</td>
<td><img src ="{{ student.profile_picture }}" style="width: 100px"></td>
<td>{{ student.admin.first_name }}</td>
<td>{{ student.admin.last_name }}</td>
<td>{{ student.gender }}</td>
<td>{{ student.address }}</td>
<td>{{ student.admin.email }}</td>
<td>{{ student.course_id.course_name}}</td>
<td>{{ student.session_start_year }}</td>
<td>{{ student.session_end_year }}</td>
<td>{{ student.admin.date_joined }}</td>
<td>{{ student.admin.last_login }}</td>
<td><a href="/EditStudent/{{ student.admin.id }}" class="btn btn-primary">Edit</a></td>
<td><a href="/DeleteStudent/{{ student.admin.id }}" class="btn btn-danger">Delete</a></td>
</tr>
{% endfor %}
</tbody>
图像正在完美上传,但我无法为它们提供服务。现在模板看起来像这样在回溯显示的模板中查看它们
11/Sep/2021 18:32:30] "GET /media/010040.jpg HTTP/1.1" 302 0
[11/Sep/2021 18:32:30] "GET /media/1580467939054_Anitha.jpg HTTP/1.1" 302 0
[11/Sep/2021 18:32:30] "GET /media/1580467939054_Anitha_mM61nlO.jpg HTTP/1.1" 302 0
**
应用程序 urls.py
**
from django.conf.urls import url
from django.urls import path
from . import views, AdminViews, StaffViews, StudentViews
urlpatterns = [
path('demo', views.demo, name='demo'),
path('DoLogin', views.DoLogin, name='DoLogin'),
path('LoginPage', views.LoginPage, name='LoginPage'),
path('GetUserDetails', views.GetUserDetails, name='GetUserDetails'),
path('LogoutUser', views.LogoutUser, name='LogoutUser'),
path('admin_home', views.admin_home, name='admin_home'),
path('AddStaff', views.AddStaff, name='AddStaff'),
path('AddStaffSave', views.AddStaffSave, name='AddStaffSave'),
path('AddCourse', views.AddCourse, name ='AddCourse'),
path('AddCourseSave', views.AddCourseSave, name='AddCourseSave'),
path('AddSubject', views.AddSubject, name ='AddSubject'),
path('AddSubjectSave', views.AddSubjectSave, name='AddSubjectSave'),
path('AddStudent', views.AddStudent, name='AddStudent'),
path('AddStudentSave', views.AddStudentSave, name='AddStudentSave'),
path('ManageStaff', views.ManageStaff, name='ManageStaff'),
path('ManageStudent', views.ManageStudent, name='ManageStudent'),
path('ManageCourse', views.ManageCourse, name='ManageCourse'),
path('ManageSubject', views.ManageSubject, name='ManageSubject'),
path('EditStaff/<str:staff_id>', views.EditStaff, name='EditStaff'),
path('EditStaffSave', views.EditStaffSave, name='EditStaffSave'),
path('EditStudent/<str:student_id>', views.EditStudent, name='EditStudent'),
path('EditStudentSave', views.EditStudentSave, name='EditStudentSave'),
path('EditCourse/<str:course_id>', views.EditCourse, name='EditCourse'),
path('EditCourseSave', views.EditCourseSave, name='EditCourseSave'),
path('EditSubject/<str:subject_id>', views.EditSubject, name='EditSubject'),
path('EditSubjectSave', views.EditSubjectSave, name='EditSubjectSave'),
path('DeleteStaff/<str:staff_id>', views.DeleteStaff, name='DeleteStaff'),
path('DeleteStudent/<str:student_id>', views.DeleteStudent, name='DeleteStudent'),
path('DeleteCourse/<str:course_id>', views.DeleteCourse, name='DeleteCourse'),
path('DeleteSubject/<str:subject_id>', views.DeleteSubject, name='DeleteSubject'),
path('StaffHome', views.StaffHome, name='StaffHome'),
path('StudentHome', views.StudentHome, name='StudentHome'),
]
当我检查源中的模板代码时,图像链接显示为 路径显示两个媒体是这个问题
`<td><img src ="/media/media/1580467939054_Anitha_wjltRgu.jpg" style="width: 100px"></td>`
谁能帮我???
解决方案
您的代码有很多问题:
1 - 在您的模型中,使用该字段用于上传图片 ImageField(要使用 ImageField,您需要安装Pillow):
profile_picture=models.ImageField(upload_to="images", null=True, blank=True)
2 - 您必须使用具有以下属性的表单:
enctype="multipart/form-data"
method="post"
注意:
在shell django 中,我们有以下内容:
假设upload_to='images'
:
\>\>\>student.profile_picture
<ImageFieldFile: images/cat.jpg>
\>\>\>student.profile_picture.url
'http://yourDomain/media/images/cat.jpg'
\>\>\>student.profile_picture.path
'media/images/cat.jpg'
\>\>\>student.profile_picture.name
'images/cat.jpg'
另请参阅以下链接:
模型中的
文件 上传的服务文件
配置设置
推荐阅读
- pivot - 如何在角度 7 中制作数据透视表?
- git - git-push 的问题
- amazon-ec2 - 从主文件表 (MFT) 重建 windows NTFS 丢失分区
- javascript - Indexeddb 离线加密数据
- reactjs - 我正在尝试使用 Yup 进行条件表单验证,但无法更改值“showfile”的值
- windows - 鼠标左键点击触发研究(F3键)窗口10
- python - 从 wsgi.py 运行代码时未检测到模块,但从 main.py 运行时检测到模块
- python - Python中时间的格式检查
- amp-html - 将自定义变量与 AMP 模块 amp-access 结合使用
- .net - C# 以编程方式保存外部参照时如何关闭 Autocad 弹出窗口?