在 Django 模板中显示图像

问题描述 投票:0回答:5

有人可以帮我解决这个问题吗:我有一个 Django 项目,

在settings.py

 MEDIA_ROOT = 'C:/Users/hl/workspace/beer/media'
 MEDIA_URL = '/media/'
 STATICFILES_DIRS = (
    'C:/Users/hl/workspace/beer/media'
 )

以及 models.py

image1= models.ImageField(upload_to=settings.MEDIA_ROOT)

和 url.py

 (r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),

在视图中

def allBeer(request): 
      beers=Beer.objects.all().order_by("name")
      context={'beers': beers}
      return render_to_response('AllBeers.html',context,context_instance=RequestContext(request))

和 html

 {%for beer in beers %}
    <p>
        <a href="/beers/{{beer.slug}}/">
            <img scr="{{beer.image1.url}}">{{beer}}
        </a>
    </p>
 {% endfor%}

加载图像没有问题,但图像不会显示在html文件中。我在网上搜索并阅读了很多,但我仍然无法弄清楚。

谁能告诉我为什么?

python django image templates
5个回答
11
投票
image1= models.ImageField(upload_to=images)


from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from project_name import settings

admin.autodiscover()
urlpatterns = patterns('',
    ...........
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += staticfiles_urlpatterns()


<img src="{{MEDIA_URL}}{{beer.image1}}">

设置.py

import os

PROJECT_ROOT = os.path.join(os.path.dirname(__file__), '..')
SITE_ROOT = PROJECT_ROOT


MEDIA_ROOT = os.path.join(SITE_ROOT, 'media')
MEDIA_URL = '/media/'


STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
STATIC_URL = '/static/'


STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    os.path.join(SITE_ROOT, 'staticfiles'),
)

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(SITE_ROOT, 'templates'),
)

8
投票

您弄乱了图像的

src
属性。应该只是-

<img src="{{beer.image1.url}}" /> <!-- from the media url -->

不要在末尾添加任何内容 - django 知道提供图像的 url - 这就是模型上的 ImageField 的作用。

我不知道你的 url conf 实际上有什么问题,但 docs 中推荐的模式是 -

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)

7
投票

按照以下步骤在 Django 模板上加载图像:

  1. 将其添加到您的设置文件中:
    
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
  1. 在项目根目录下创建一个名为“media”的文件夹,这意味着该文件夹将与您的应用程序处于同一级别

  2. 将这些添加到您的主 urls.py

from . import views, settings
from django.contrib.staticfiles.urls import static

urlpatterns = [
    # ... the rest of your path goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  1. 在您的模型中,使用 ImageField 作为用于图像的字段。
    
photo = models.ImageField(upload_to="gallery")
  1. 将以下内容添加到您的模板中以加载您的图像

如果要从上下文对象动态加载,请使用与此类似的语法:

    
img src="{{ obj1.photo.url }}"

如果静态加载,当文件名已经确定时,使用:

img src="/media/project_name/photo.png"

0
投票

图像的位置很重要。它必须位于静态文件夹中,并且必须在设置中定义。


0
投票

我最终通过创建一个文件夹目录来上传我的图像来解决这个问题,例如:

public/static/receipe

所以我的settings.py 看起来像:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'public/static')
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'public/media')
MEDIA_URL = '/media/'

我的模型.py:

from django.db import models

# Create your models here.


class Receipe(models.Model):
    receipe_name = models.CharField(max_length=100)
    receipe_description = models.TextField()
    receipe_Image = models.ImageField(upload_to="receipe/")

在我的receipes.html中: 这里别忘了加上{% load static %}

 {% load static %}
        <img src="/static/{{receipe.receipe_Image}}" height="100" width="100" />

现在根据您的路径更改此代码,您就完成了:)

© www.soinside.com 2019 - 2024. All rights reserved.