2014-03-07 52 views
1

我们正在Django上创建我们的学校网站,我们制作了一个图库应用程序,但是我认为这些图像没有上传到指定的文件夹,而是他们甚至没有上传我认为如此。 代码: -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
注中可以看出:在画廊模板包含了一些冲突,但不是实际的问题。

+0

您的https://github.com/Anurag-Ans/JHTS/blob/master/templates/gallery/index.html文件存在冲突。解决它。然后尝试。 –

+0

是的,我已经看到,甚至在修复它在我的本地机器后,它仍然没有工作:( –

+0

只是忘了推代码 –

回答

1

我花了一段时间才注意到它,因为它有点棘手。但回想起来很明显。

所以配置MEDIA_URL = "/MEDIA/"后,我注意到http://127.0.0.1:8000/media/给了我一个404。如果一切配置正确(它是),那么通常问题是冲突的网址。看到在Django中使用的url模式总是按顺序评估。这意味着如果你有网址,像这样:

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

然后第二个网址绝不可。为什么?因为这里没有任何信息告诉网址调度员,第一个网址应该在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(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(r'^/$', 'pages.views.index'), 
url(r'^pages/$', include('pages.urls')), 

之后,这将工作:

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

ps

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

+0

谢谢你的帮助@yuvi –

+0

哎@yuvi这个解决方案可以工作,但是当我重新启动我的电脑时没有显示图像, –

+0

帮助在这 –