Загрузка файлов Django не работает; Получение 404 ошибки при попытке их извлечения. Страница не найдена (404) не существует
Я сделал пользовательскую модель пользователя, которую пользователи могут получить, чтобы загрузить свои фотографии профиля и документы. Я сделал представление для обновления этих данных и вставки их в базу данных.
Однако, когда я пытаюсь получить файл, я получаю сообщение 404. Они никогда не были загружены, хотя поле файла было заполнено именем и путем.
Забавно то, что когда я использую сайт администратора, т.е. 127.0.0.1:800/admin, все работает правильно. Что я делаю не так? Я схожу с ума.
Вся база кода находится на моем GitHub
Полное сообщение об ошибке:
Page not found (404) “C:\Users\Bosire Allan\PycharmProjects\eric\media\6244238d0f84e.png” does not exist Request Method: GET Request URL: http://127.0.0.1:8000/media/6244238d0f84e.png Raised by: django.views.static.serve
Я правильно настроил параметры MEDIA_ROOT
и urls.py
, я думаю.
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls, name='admin'),
path('', include('application.urls')),
path('', include('django.contrib.auth.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Мой settings.py
STATIC_URL = 'static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
Мой models.py
class User_data(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=False)
dob = models.DateField(blank=True, null=True)
city = models.CharField(max_length=20, blank=True, null=True)
highQ = models.CharField(max_length=20,
choices=EDUCATION,
default='Degree', blank=True, null=True)
institution = models.CharField(max_length=20, blank=True, null=True)
gender = models.CharField(max_length=20,
choices=GENDER,
default='Nairobi', blank=True, null=True)
dog = models.DateField(blank=True, null=True)
profile_pic = models.FileField(blank=True, null=True, upload_to='pics/')
cv = models.FileField(blank=True, null=True, upload_to='docs/')
class Meta:
verbose_name_plural = "User Data"
def __str__(self):
return self.user.username
@property
def user_gender(self):
return self.gender
Мой views.py
@login_required(login_url='application:login')
def profile(request):
user_data_date_birth = datetime.datetime.now().strftime("%Y-%m-%d")
user_data_date_grad = datetime.datetime.now().strftime("%Y-%m-%d")
try:
user_data = User_data.objects.get(user=request.user)
except Exception as e:
print(e)
user_data = None
if user_data is not None:
if user_data.dog is not None:
user_data_date_grad = user_data.dog.strftime("%Y-%m-%d")
if user_data.dob is not None:
user_data_date_birth = user_data.dob.strftime("%Y-%m-%d")
context = {
'user_data': user_data,
'user_data_dog': str(user_data_date_grad),
'user_data_dob': str(user_data_date_birth),
}
return render(request, 'profile.html', context)
return render(request, 'profile.html')
Я предполагаю, что это была ошибка в django, или недосмотр при миграции базы данных. Я заново создал новый проект с новыми миграциями, и все работает как ожидалось.