Django从数据库提供图像

时间:2014-04-06 15:36:02

标签: python regex django

我正在添加尝试获取应用程序以在我的数据库中提供图像字段以显示在我的模板中。为了组织起见,我想知道是否有办法绕过必须使用全局媒体目录/网址设置。在我的模态中,我已设置并上传到选项。我喜欢使用带有正则表达式命名组的应用程序的URL映射来告诉我的视图路径和图像名称是什么。将其连接成一个字符串并回送该文件。如果这是一个可怕的想法,或者只是非常低效,我会做其他事情。任何帮助是极大的赞赏。这是我到目前为止所拥有的。

模板:`

{% for category in items %}
                <div class="col-sm-4 col-lg-4 col-md-4">
                    <div class="thumbnail">
                        <img src="{{ category.picture }}" />
                        <div class="caption">
                            <h4 class="pull-right">${{ category.price }}</h4>

                            <h4><a href="#">{{ category.itemName }}</a>

                            </h4>
                        </div>

                    </div>
                </div>
{% endfor %}

Models.py:

from django.db import models

class StoreCategory(models.Model):
    categoryName = models.CharField(max_length=128)
    def __unicode__(self):
            return self.categoryName

class StoreItem(models.Model):

    category = models.ForeignKey(StoreCategory)
    itemName = models.CharField(max_length=128)
    description = models.CharField(max_length=1024)
    price = models.DecimalField(max_digits=16,decimal_places=2)
    quantity = models.IntegerField(default=0)
    picture = models.ImageField(upload_to='store_images', blank=False)
    def __unicode__(self):
            return  self.itemName

Urls.py:

urlpatterns = patterns('',
url(r'^$', views.webstore, name='webstore'),
url(r'^FiberArts/$', views.FiberArts, name='FiberArts'),
url(r'^FiberArts/(?P<directory>[\w]+)/(?P<image_name>[\w]+)$',views.getImage)
)

查看:(目前这个从未被调用,正则表达式有问题吗?)

def getImage(request, directory, image_name):
    imagelocation = directory + '/' + image_name
    print imagelocation
    image_data = open(imagelocation, "rb").read()

    return HttpResponse(image_data, mimetype="image/png")

编辑:这是我得到的错误:

[06/Apr/2014 15:48:35] "GET /webstore/FiberArts/store_images/product_150_1.jpg HTTP/1.1" 404 3743

1 个答案:

答案 0 :(得分:2)

将该url正则表达式更改为此(?P<directory>[\w]+)/(?P<image_name>[\w]+\.[\w]+)$'并修复您的视图以接受正确数量的参数。您现在应该在视图中收到正确的image_name