9

我只想通过网页上的 html 图像标签显示我通过管理模块上传的图像。该图像位于 /home/user/work/djcode/media/chicks/blondie.jpg。

这是我的models.py的相关部分

class Image(models.Model):
    model_name = models.CharField(max_length=50)
    model_pic = models.ImageField(upload_to='chicks/')
def __unicode__(self):
    return self.model_name

这是我的views.py的相关部分

def main(request):
    i = get_object_or_404(Image, pk=1)
    return render_to_response('polls/main.html', {'image': i}, context_instance=RequestContext(request))

我正在使用的 html 标签很简单

<img src="{{ MEDIA_ROOT }}/{{ image.model_pic.url }}">

从 settings.py,我的媒体根目录是 MEDIA_ROOT = '/home/user/work/djcode/media'

请注意,变量 {{ image.model_pic.url }} 通过 html 模板显示“chicks/blondie.jpg”,所以我认为我的图像对象确实很好地发送到了模板。

任何人都可以帮我解决这个问题吗?那真的很有帮助。

非常感谢您的时间!

4

3 回答 3

13

您在模板中的图像字段上使用 url 函数并不完全正确 -{{ image.model_pic.url }}应该可以解决问题。你只需要放下{{ MEDIA_URL }}一点。

你的 html 应该是 -

<img src="{{ image.model_pic.url }}">

查看有关在模型中使用文件的文档。

如果您仍然遇到问题,则可能是提供静态文件的问题。在 django 中提供静态文件取决于您是在生产中还是仅使用python manage.py runserver命令。

要在开发过程中提供媒体文件(使用 python manage.py runserver),请确保您的 settings.py 中的 MEDIA_URL 和 MEDIA_ROOT 正确,然后您可以将以下内容附加到您的 url conf -

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

查看文档以获取有关如何在生产中提供文件的说明。

于 2013-02-03T18:43:07.590 回答
1

您需要使用{{MEDIA_URL}}or {{STATIC_URL}},选择取决于您如何管理服务器上的文件。如果你用{{STATIC_URL}}这个是最好的。

于 2013-02-03T18:34:42.647 回答
0

尝试执行以下操作:

from django.conf import settings
from django.conf.urls.static import static
from . import views

urlpatterns = [
            .....
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
于 2020-07-31T22:30:05.117 回答