gpt4 book ai didi

python - Django 图像未上传

转载 作者:行者123 更新时间:2023-12-01 05:21:21 28 4
gpt4 key购买 nike

我们正在 Django 上制作我们的学校网站,我们制作了一个图库应用程序,但我认为图像没有上传到指定文件夹,而是我认为它们甚至没有上传。代码:-

# views.py
def upload(request, template_name="gallery/form.html"):
form = GalleryForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
messages.success(request, "image has been uploaded")
return redirect('gallery.views.index')

return render(request, template_name,{'form':form})

from django.db import models

# models.py
class GalleryPhoto(models.Model):
image = models.ImageField(upload_to='pic_folder/')
description = models.CharField(max_length=50)

def __unicode__(self):
return self.image.url

其余代码可以在这个repo中看到
注意:图库模板包含一些冲突,但这不是实际问题。

最佳答案

我花了一段时间才注意到它,因为它有点棘手。但回想起来,这是显而易见的。

因此,在配置 MEDIA_URL = "/MEDIA/" 后,我注意到 http://127.0.0.1:8000/media/ 给了我一个 404。如果配置正确(确实如此),那么问题通常是网址冲突。请参阅 django 中使用的 url 模式始终按顺序求值。这意味着如果您有这样的网址:

url(r'^mypage/', 'myapp.mypage'),
url(r'^mypage/another/', 'myapp.different')

那么第二个网址将永远不可用。为什么?因为上面没有任何内容告诉 url 调度程序第一个 url 应以 mypage/ 结尾。就其而言,以 http://DOMAIN/mypage/ 开头的所有内容都将被捕获并传递给第一个函数。

为了避免这种情况,我们使用 $ 符号告诉调度员在什么时候停止。就像这样:

url(r'^mypage/$', 'myapp.mypage'),
url(r'^mypage/another/$', 'myapp.different')

现在让我们看看您的最后两个网址:

    url(r'^', include('pages.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

看到了吗? url(r'^' 吞掉其后的所有内容,因此不会提供任何媒体。pages.urls 确实使用美元作为其第一个 url:

url(r'^$', views.index, name='index'),

但这对于主 url 调度程序来说并不重要,它首先评估 r'^'。解决办法是什么?最简单的方法是将 pages 网址移至末尾:

    url(r'^ckeditor/', include('ckeditor.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += patterns('', url(r'^', include('pages.urls')))

您还可以使用直接调用将有问题的 URL 与其他 URL 隔离,如下所示:

url(r'^/$', 'pages.views.index'),
url(r'^pages/$', include('pages.urls')),

之后,这将起作用:

<img src="{{ MEDIA_URL }}{{ image.image.url }}"  alt="{{ image.description }}">

附注

最终,当您转移到部署级别时,您将通过服务器传递媒体和静态文件,所以也许整个事情都不再重要了。如果您决定保留使用 r'^',请记住它可能会导致与其他网址发生冲突的问题,因此请务必将其放在最后。

关于python - Django 图像未上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22244978/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com