首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Django 1.6中提供图像

在Django 1.6中提供图像
EN

Stack Overflow用户
提问于 2014-03-29 18:13:39
回答 1查看 320关注 0票数 1

我的问题是,我不能服务我保存的图像,通过我的应用程序的管理界面。或者更确切地说,我可以,但是通过一条迂回的路--我相信这不是正确的方法。这个网站是关于葡萄酒的。有一个管理端,允许用户编写评论,并保存瓶子的图片。这似乎很好,但当我试图在网页上提供该图像时,会出现各种错误。这款应用被称为“火鸡酒”。我用的是Django 1.6

下面是设置:

1) model.py文件:

代码语言:javascript
复制
from django.db import models

class Wines(models.Model):

    wine_winery = models.ForeignKey(Winery)
    wine_name = models.CharField(max_length=200)
    wine_image = models.ImageField(blank=True, upload_to='static/images/wine/')
    ....

    def __unicode__(self):  # Python 3: def __str__(self):
        return self.wine_name

2)我有这样的文件结构,并且图像从管理端保存到静态/映像/葡萄酒

代码语言:javascript
复制
├── db.sqlite3
├── manage.py
├── static
│   └── images
│       ├── wine
│       │   ├── bottle_example2.png
│       │   ├── Buzbag-Rezerv-2008.png
│       │   ├── Imperial-Export-2005.png
│       │   └── Versus-Syrah-Viognier-2013.png
├── turkishwine
│   ├── admin.py
│   ├── __init__.py
│   ├── models.py
│   ├── templates
│   │   └── turkishwine
│   │       ├── index.html
│   │       ├── individualwine.html
│   │       └── wines.html
│   ├── tests.py
│   ├── urls.py
│   ├── views.py
└── wilswebsite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    ├── wsgi.py

3) settings.py文件包括以下内容:

代码语言:javascript
复制
INSTALLED_APPS = (
    ...
    'django.contrib.staticfiles',
    'turkishwine',
)

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
)

4) views.py是这样的:

代码语言:javascript
复制
from django.http import HttpResponse
from django.shortcuts import render
from turkishwine.models import Wines 

def wines(request, id):
    individual_wine = Wines.objects.get(pk=id)
    context = {'individual_wine': individual_wine}
    return render(request, 'turkishwine/individualwine.html', context)
...

5) urls.py包括:

代码语言:javascript
复制
from django.conf.urls import patterns, url
from turkishwine import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^wines/(?P<id>\d+)/$', views.wines, name='wines'),
  ...
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

以下是问题所在:

( A)管理端成功地显示了一个上传按钮。我上传了图像(它出现在静态/图像/葡萄酒文件夹中),它在管理表单上列出如下

代码语言:javascript
复制
Wine image: Currently: static/images/wine/Versus-Syrah-Viognier-2013.png

然而,当我点击蓝色链接来检查图片时,我会得到一个404,上面写着:

请求网址: 127.00.00.1:8000/admin/turkishwine/wines/2/static/images/wine/Versus-Syrah-Viognier-2013.png/ 不存在带有主键u'2/static/images/wine/Versus-Syrah-Viognier-2013.png‘的does对象。

注意,URL不是..../static/images/wine/Versus-Syrah-Viognier-2013.png/,而是.../**admin/turkishwine/wines/2/**static/images/wine/Versus-Syrah-Viognier-2013.png/

我可以通过导航到127.00.00.1:8000/static/images/wine/Versus-Syrah-Viognier-2013.png/来检索图像。然而,看起来管理端或目录结构都有问题,但我想不出是什么。为什么它要在URL中添加admin/turkish红酒/红酒/2/呢?

B)我可以在模板(individualwine.html)中检索图片,方法是返回三个目录,如下所示:

代码语言:javascript
复制
{% load staticfiles %}
<img src= "../../../{{ individual_wine.wine_image }}"/>

https://docs.djangoproject.com/en/1.6/howto/static-files/中列出的方法并非如此,该方法建议:

代码语言:javascript
复制
{% load staticfiles %}
<img src="{% static "{{ individual_wine.wine_image }}" %}"/>

,这将导致URL:127.00.00.1:8000/static/{{ individual_wine.wine_image }}

显然,我的设置有问题,但我不知道在哪里。任何帮助都非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-29 18:33:22

ImageField继承自FileField https://docs.djangoproject.com/en/dev/ref/models/fields/#imagefield

upload_to参数采用附加到MEDIA_ROOT设置to的相对路径。

做这样的事

settings.py

代码语言:javascript
复制
import os
....
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
MEDIA_ROOT = os.path.abspath(os.path.join(BASE_DIR, 'media'))
MEDIA_URL = '/media/'

models.py

代码语言:javascript
复制
class Wines(models.Model):
    ...
    wine_image = models.ImageField(blank=True, upload_to='wine')
    ....

它们将被上传到/media/图像/葡萄酒中,并且一切都应该正常工作,您应该能够使用这样的方法从模板中访问它们

代码语言:javascript
复制
 <img src="{{ individual_wine.wine_image.url }}"/>

如果您希望能够从管理列表中看到模型图像,那么请看一看https://github.com/20tab/twentytab-image-ui,它很简单也很有用!

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

https://stackoverflow.com/questions/22734882

复制
相关文章

相似问题

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