Py学习  »  Django

[精华] 关于ImageField后台上传图片的问题

bmin • 11 年前 • 8179 次点击  

in models.py

class Input(models.Model):
    inputid = models.CharField(verbose_name='入库单号', max_length=30)
    inputdate = models.DateField(verbose_name='入库日期')
    hetongid = models.CharField(verbose_name='合同编号', max_length=30)
    chandi = models.ForeignKey(Chandi, verbose_name='产地')
    name = models.CharField(verbose_name='商品名称', max_length=100)
    year = models.IntegerField(verbose_name='年份')
    keyid = models.CharField(verbose_name='箱序列号', max_length=20)
    bizhong = models.ForeignKey(Bizhong, verbose_name='币种')
    money = models.FloatField(verbose_name='金额'))
    input_pic = models.ImageField(upload_to='input_pic/')

in settings.py

HERE = os.path.dirname(os.path.abspath(__file__))

MEDIA_ROOT = os.path.join(HERE,'media').replace('\\','/')+'/'

MEDIA_URL = '/media/'

用admin后台上传图片后.. mysql数据库的input_pic值为:

input_pic/85144-340070694_l.jpg

但是在浏览器中访问如下地址不成功:

http://127.0.0.1:8000/media/input_pic/85144-340070694_l.jpg

提示:

Using the URLconf defined in ceshi.urls, Django tried these URL patterns, in this order:
^admin/
The current URL, media/input_pic/85144-340070694_l.jpg, didn't match any of these.

请问是怎么回事儿?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/303
 
8179 次点击  
文章 [ 4 ]  |  最新文章 11 年前
我心荡漾
Reply   •   1 楼
我心荡漾    11 年前

同上

cdxfish
Reply   •   2 楼
cdxfish    11 年前
if settings.DEBUG:
urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT }),
        url(r'^static/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.STATIC_ROOT}),
)

这个只是在你DEBUG的时候才有效,是使用的Django自己内部的静态资源处理机制. 当setting 模板背下来吧,等你release的时候也没有太大用:)

如果你想知道具体为啥看django.views.static.serve这个函数源码

bmin
Reply   •   3 楼
bmin    11 年前

再更新一下..图片(媒体)文件和静态资源文件分开比较好..之前都混在一起了..

in settings.py

HERE = os.path.dirname(os.path.abspath(__file__))

MEDIA_ROOT = os.path.join(HERE,'media').replace('\\','/')+'/'

MEDIA_URL = '/media/'

STATIC_PATH = os.path.join(HERE,'static').replace('\\','/')+'/'

TEMPLATE_DIRS = os.path.join(HERE,'templates').replace('\\','/')+'/'

in urls.py

from django.conf import settings
urlpatterns = patterns('',
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
)
bmin
Reply   •   4 楼
bmin    11 年前

自己搜了一下..解决了这个问题..但还不是太理解.. 先把最终代码贴在这..

in settings.py

HERE = os.path.dirname(os.path.abspath(__file__))

MEDIA_ROOT = os.path.join(HERE,'media').replace('\\','/')+'/'

MEDIA_URL = '/media/'

STATIC_PATH = os.path.join(HERE,'media').replace('\\','/')+'/'

in urls.py

from django.conf import settings

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