首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -图像显示不正确

问Django -图像显示不正确
EN

Stack Overflow用户
提问于 2014-03-24 15:35:37
回答 1查看 1.4K关注 0票数 1

目前正在从事一个小型Django电子商务项目,并遇到了一个小问题。作为参考,我正在使用Tango与Django的书在线免费提供。

我在模型中设置了一个ImageField集,以便为产品模型指定产品的图像。我还有一个名为“类别”的模型,它使用ForeignKey引用产品模型。

图像上载到模型中的/static/products_img文件夹,但是,当图像显示在我的模板中时,图像链接到/静态/静态/products_img文件夹。但是,当我移除模型中的/static,然后通过管理界面上传图像时,它会将其上传到/products_img,而不是静态文件夹,当然,它显示得很好。但是..。更奇怪的是,当我删除新创建的目录并将图像放在静态文件夹中的/product_img文件夹中时,它仍然会显示!

我真的很困惑。

代码语言:javascript
复制
models.py

class Product(models.Model):
...
    image = models.ImageField(upload_to='static/products_img', blank=True)


template.html
<a href="{{ product.slug }}"><img src="{{ STATIC_URL }}{{ product.image }}" alt="{{ product.name }}" /></a>


settings.py
...
SETTINGS_DIR = os.path.dirname(__file__)
PROJECT_PATH = os.path.join(SETTINGS_DIR, os.pardir)
PROJECT_PATH = os.path.abspath(PROJECT_PATH)
...
STATIC_PATH = os.path.join(PROJECT_PATH,'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    STATIC_PATH,
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-24 16:33:36

我认为你混淆了静态文件和媒体文件。静态文件与应用程序(CSS、JS.)捆绑在一起,而媒体文件则由用户上传。

据我所知,您的产品图片是媒体文件,而不是静态文件。

如果您将模板部件替换为:

代码语言:javascript
复制
<a href="{{ product.slug }}"><img src="{{ product.image.url }}" alt="{{ product.name }}" /></a>

你的模特:

代码语言:javascript
复制
image = models.ImageField(upload_to='products/img', blank=True)

并将相应的设置添加到settings.py中:

代码语言:javascript
复制
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))
# with this, your media directory will be the same directory than your settings.py file
# you can also use a standard path like "/var/www/media"
# IMPORTANT : In any case, you have to create the directory by hand
MEDIA_ROOT = os.path.join(PROJECT_PATH, "media")
MEDIA_URL = "/media/"

如果将图像上传到产品中,则应该将其保存在MEDIA_ROOT目录下。模板中显示的URL应该是/media/projects/img/image_name。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22613854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档