Мне известен этот вопрос: Django Загруженные изображения не отображаются в разработке , Я сделал все, что описано, но все еще не могу найти решение. Я также использовал для справки следующее: GeeksForGeeks и Загруженные файлы и загруженные обработчики - Django документация , однако ни один из них не решил мою проблему.
У меня есть впервые развернул приложение Django на сервере Ubuntu, используя Nginx и gunicorn. Перед развертыванием я использовал порт 8000, чтобы проверить, все ли работает так, как должно, и все ли в порядке. Поскольку я разрешил 'Nginx Full', изображения моей базы данных не отображаются.
Это моя структура проекта django:
My virtual environment folder and my main project folder are both in the same directory. I have separated them.
# Create your models here.
class Project(models.Model):
project_name = models.CharField(max_length=120)
project_description = models.CharField(max_length=400)
project_link = models.CharField(max_length=500)
project_image = models.ImageField(upload_to='')
def __str__(self):
return self.project_name
Я настроил свой settings.py на:
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), '..', 'media').replace('\\','/')
Мое представление получает все объекты проекта из базы данных и передает их в шаблон. Шаблон успешно отображает всю остальную информацию, относящуюся к модели проекта, за исключением поля изображения. В моем шаблоне я делаю:
<div class="row text-center mx-auto">
{% for project in projects %}
{% if forloop.counter|mod:2 == 0 %}
<div class="col projects pb-3 pt-3 mb-3 ml-2">
{% else %}
<div class="col projects pb-3 pt-3 mb-3 mr-2">
{% endif %}
<img class="card-img-top pt-2 pl-2 pr-2" src="{{ project.project_image.url}}"
alt="Image could not be found :(" style="height:120px; width:166px !important;" /><br>
<div class="card-body">
<h3 class="card-title ">{{ project.project_name }}</h3>
<p class="card-text dates">{{ project.project_description}}</p>
<a href="{{ project.project_link }}" class="btn btn-dark" target="_blank">Link</a>
</div>
</div>
{% if forloop.counter|mod:2 == 0 %}
<div class="w-100"></div>
{% endif %}
{% endfor%}
</div>
</div>
Загрузка изображений работает, они отправляются в медиа-каталог проекта, проблема в том, что они не отображаются, активирован alt = "".
Мой основной urls.py:
urlpatterns = [
path('', include('project.urls')),
path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Системный файл gunicorn:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=myusername
Group=www-data
WorkingDirectory=/home/myusername/myproject
ExecStart=/home/myusername/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/myusername/myproject/myproject.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
Nginx настройка:
server {
listen 80;
server_name <my IP> ;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/myusername/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/myusername/myproject/myproject.sock;
}
}
РЕДАКТИРОВАТЬ: при проверке элемент изображения веб-страницы, источником изображения является "/media/imageNmae.png". Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ: Решение найдено, Nginx не обслуживает СМИ, как предложил Даниэль. Существует некоторая документация по uWSGI, которую стоит прочитать, чтобы избежать подобных проблем Документация