目前正在从事一个小型Django电子商务项目,并遇到了一个小问题。作为参考,我正在使用Tango与Django的书在线免费提供。
我在模型中设置了一个ImageField集,以便为产品模型指定产品的图像。我还有一个名为“类别”的模型,它使用ForeignKey引用产品模型。
图像上载到模型中的/static/products_img文件夹,但是,当图像显示在我的模板中时,图像链接到/静态/静态/products_img文件夹。但是,当我移除模型中的/static,然后通过管理界面上传图像时,它会将其上传到/products_img,而不是静态文件夹,当然,它显示得很好。但是..。更奇怪的是,当我删除新创建的目录并将图像放在静态文件夹中的/product_img文件夹中时,它仍然会显示!
我真的很困惑。
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,
)发布于 2014-03-24 16:33:36
我认为你混淆了静态文件和媒体文件。静态文件与应用程序(CSS、JS.)捆绑在一起,而媒体文件则由用户上传。
据我所知,您的产品图片是媒体文件,而不是静态文件。
如果您将模板部件替换为:
<a href="{{ product.slug }}"><img src="{{ product.image.url }}" alt="{{ product.name }}" /></a>你的模特:
image = models.ImageField(upload_to='products/img', blank=True)并将相应的设置添加到settings.py中:
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。
https://stackoverflow.com/questions/22613854
复制相似问题