Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 上传的图像未显示,路径错误_Django_Upload_Path - Fatal编程技术网

Django 上传的图像未显示,路径错误

Django 上传的图像未显示,路径错误,django,upload,path,Django,Upload,Path,我在显示从管理面板上传的图像时遇到问题。Django呈现了错误的路径,可能是由于我在某个地方的配置错误 这是我的模型定义: class Article(models.Model): """News article, displayed on homepage to attract users""" class Meta: db_table = 'article' title = models.CharField(max_length=64) hea

我在显示从管理面板上传的图像时遇到问题。Django呈现了错误的路径,可能是由于我在某个地方的配置错误

这是我的模型定义:

class Article(models.Model):
    """News article, displayed on homepage to attract users"""
    class Meta:
        db_table = 'article'
    title = models.CharField(max_length=64)
    headline = models.CharField(max_length=255)
    content = HTMLField()
    image = models.ImageField(upload_to = 'articles/', null=True, blank=True)
    active = models.BooleanField()
    created_at = models.DateTimeField()
    def __unicode__(self):
        return self.title
这是url配置:

from django.conf.urls import patterns, include, url
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
# some stuff
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py:

PROJECT_DIR = os.path.dirname(__file__)
MEDIA_ROOT = os.path.join(PROJECT_DIR, "media")
MEDIA_URL = '/media/'
观点:

def slider(request):
    context = Context ({ 'articles': Article.objects.order_by('-created_at')[:5] })
    return render(request, 'articles/slider.html', context)
以及模板:

{% for article in articles %}
  <img src="{{ article.image.url }}" alt="" />

同样,它应该是
media/articles/slide-03.jpg
,而不是
media/slide-03.jpg
。所以我想所有的路由/模板都可以,模型有问题。

您是否尝试使用上传方法:

def upload_path(self, filename):
    return 'media/articles/%s' % filename

class Article(models.Model):
    ...
    image = models.ImageField(upload_to=upload_path, null=True, blank=True)
    ...

视图中.py

from django.shortcuts import render_to_response, RequestContext
def slider(request):
    articles = Article.objects.order_by('-created_at')[:5]
    return render_to_response('articles/slider.html', locals(), context_instance = RequestContext(request)
{% for article in articles %}
    <img src="{{ MEDIA_URL }}{{ article.image.url }}" alt="" />
{% endfor %}
from django.conf import settings
urlpatterns += patterns('',
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)
在slider.html中:

from django.shortcuts import render_to_response, RequestContext
def slider(request):
    articles = Article.objects.order_by('-created_at')[:5]
    return render_to_response('articles/slider.html', locals(), context_instance = RequestContext(request)
{% for article in articles %}
    <img src="{{ MEDIA_URL }}{{ article.image.url }}" alt="" />
{% endfor %}
from django.conf import settings
urlpatterns += patterns('',
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)
{%用于文章%中的文章]
{%endfor%}
url.py中

from django.shortcuts import render_to_response, RequestContext
def slider(request):
    articles = Article.objects.order_by('-created_at')[:5]
    return render_to_response('articles/slider.html', locals(), context_instance = RequestContext(request)
{% for article in articles %}
    <img src="{{ MEDIA_URL }}{{ article.image.url }}" alt="" />
{% endfor %}
from django.conf import settings
urlpatterns += patterns('',
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)
来自django.conf导入设置的

urlpatterns+=模式(“”,
(r“^media/(?P.*)”、“django.views.static.service”、{“document\u root”:settings.media\u root}),
)

尝试使用上述给定代码。

上述解决方案完全可以。我的问题是用JSON编写并加载到数据库中的设备配置不正确。我想在你将
文章
目录作为
上传到
kwarg时,它会被动态加载不是。它仅在保存图像时使用,在从数据库加载图像时被忽略。因此,如果我有

"image":"slide.jpg"
我把它改成:

"image":"articles/slide.jpg"

它成功了。事实上,它一直在工作,但我在django官方文件中遗漏了一条关于这一点的说明。

我觉得还可以。也许图像是在您将
上传到=文章之前上传的?或者你在添加后忘记在编辑器中点击save?(抱歉,不得不问一下)。所有记录都加载了fixture/syncdb,所以我想它应该可以正常工作。试试
/media/{{{article.image}}/
我试过了,但没有做任何更改,因为-不知怎的-
上传到
被忽略:/。我查看了django源代码,发现
FileField
ImageField
都使用
存储机制。也许有一个约定,应该将什么值传递给
upload\u to
kwarg?一个我不遵循的惯例-这就是原因?顺便说一句,如果你的解决方案有效,我会在模板中使用
/media/media/articles/file.jpg
路径,因为
storage.url
/
storage.path
返回
/media/
设置.py
中配置的路径。