Django 上的损坏图像
Broken Images on Django
我在 django 上的图像损坏了。我猜下面是带有代码的相关信息。我是 django 的新手,如有任何信息,我们将不胜感激。
project/site=图片站点的名称
应用名称=图库
在models.py,
class Photo(models.Model):
pub_date = timezone.now()
image = models.ImageField(upload_to='images')
在 views.py、
def view_gallery(request):
photo_list = Photo.objects.all()
return render(request, 'gallery/view_gallery.html', {'photo_list' : photo_list})
在view_gallery.html,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Gallery</title>
</head>
<body>
{% csrf_token %}
{% for photo in photo_list.all %}
<img src="{{ photo.image.url }}" width="240">
<h2> {{ photo.pub_date }} </h2>
<br>
{% endfor %}
</body>
</html>
在settings.py,
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'imagesite/media')
在imagesite/urls.py,
urlpatterns = [
path('imagesite/', include('gallery.urls')),
path('admin/', admin.site.urls),
]
在gallery/urls.py,
urlpatterns = [
path('', views.view_gallery, name='view_gallery'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
您的 static()
url 应该添加到主 urls.py 文件,而不是您的 gallery/urls.py
。现在你在它们前面加上 /imagesite/
所以基本上你告诉 django 创建 urls /imagesite/media/
而不是 /media/
.
此外,为了清楚起见:这是一个 url 设置,应该 仅用于开发 ,而不用于生产。所以最好在你的 main urls.py:
中这样做
from django.conf import settings
urlpatterns = [
path('imagesite/', include(gallery.urls)),
...
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
最后,不要假设路径为“/”,正如您在 Windows 上看到的那样,路径分隔符是“\”。您的 MEDIA_ROOT
设置在文件夹 "imagesite":
中创建文件夹 "imagesite/media" 而不是文件夹 "media"
MEDIA_ROOT = os.path.join(BASE_DIR, 'imagesite', 'media')
我在 django 上的图像损坏了。我猜下面是带有代码的相关信息。我是 django 的新手,如有任何信息,我们将不胜感激。
project/site=图片站点的名称
应用名称=图库
在models.py,
class Photo(models.Model):
pub_date = timezone.now()
image = models.ImageField(upload_to='images')
在 views.py、
def view_gallery(request):
photo_list = Photo.objects.all()
return render(request, 'gallery/view_gallery.html', {'photo_list' : photo_list})
在view_gallery.html,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Gallery</title>
</head>
<body>
{% csrf_token %}
{% for photo in photo_list.all %}
<img src="{{ photo.image.url }}" width="240">
<h2> {{ photo.pub_date }} </h2>
<br>
{% endfor %}
</body>
</html>
在settings.py,
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'imagesite/media')
在imagesite/urls.py,
urlpatterns = [
path('imagesite/', include('gallery.urls')),
path('admin/', admin.site.urls),
]
在gallery/urls.py,
urlpatterns = [
path('', views.view_gallery, name='view_gallery'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
您的 static()
url 应该添加到主 urls.py 文件,而不是您的 gallery/urls.py
。现在你在它们前面加上 /imagesite/
所以基本上你告诉 django 创建 urls /imagesite/media/
而不是 /media/
.
此外,为了清楚起见:这是一个 url 设置,应该 仅用于开发 ,而不用于生产。所以最好在你的 main urls.py:
中这样做from django.conf import settings
urlpatterns = [
path('imagesite/', include(gallery.urls)),
...
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
最后,不要假设路径为“/”,正如您在 Windows 上看到的那样,路径分隔符是“\”。您的 MEDIA_ROOT
设置在文件夹 "imagesite":
MEDIA_ROOT = os.path.join(BASE_DIR, 'imagesite', 'media')