为django-adminfiles提供静态用户上传文件的正确方法

时间:2011-09-21 08:01:22

标签: django

我正在尝试将django-adminfiles添加到我的django项目之一(百日草博客)。
我正在使用具有以下配置的Django 1.3:

# setttings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(current_dir, 'static_collected')
STATICFILES_DIRS = (
    '/path/to/myproject/src/django-adminfiles/adminfiles/media',
...)

# urls.py
urlpatterns += staticfiles_urlpatterns()
urlpatterns += patterns('',
    url(r'^adminfiles/(?P<path>.*)$', 'django.views.static.serve', 
    {'document_root': os.path.join(parent_dir, 'adminfiles')}),)

然后我运行bin/manage collecstatic来收集静态文件(我正在使用带有djangorecipe的buildout)。
然后我可以使用管理界面上传文件,但缩略图既不出现在管理界面也不出现在公共网站上,我在django的输出中有404错误:

# If I go to the admin interface at /admin/zinnia/entry/2/
[21/Sep/2011 09:39:16] "GET /adminfiles/all/adminfiles/fluxboxwall_jpg_144x150_q85.jpg HTTP/1.1" 404 1886
[21/Sep/2011 09:39:16] "GET /adminfiles/all/adminfiles/DD_jpg_144x150_q85.jpg HTTP/1.1" 404 1859

# If I visit my public located at /blog
[21/Sep/2011 09:36:02] "GET /blog/adminfiles/fluxboxwall.jpg HTTP/1.1" 404 6758
# This file can be accessed through /adminfiles/fluxwall.jpg
[21/Sep/2011 09:36:02] "GET /blog/adminfiles/DD.jpg HTTP/1.1" 404 6731
# This file can be accessed through /adminfiles/DD.jpg

我可以通过在模板中添加斜杠来使django-adminfiles工作:

templates/adminfiles/uploader.html, line 37,用于管理界面中的缩略图 <li class="item {{f.content_type}} {{f.sub_type}}" {% if f.is_image %}style="background-image:url( / {% thumbnail f.upload 144x150 %});"{% else %}{% if f.mime_image %}style="background-image:url({{ f.mime_image }});"{% endif %}{% endif %}>

templates/adminfiles/default.html, line 2,让我的照片显示在我的公开博客中 <img src=" / {{ upload.upload.url }}" width="{{ upload.width }}" height="{{ upload.height }}" class="{{ options.class }}" alt="{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}" />

但是,我认为我不应该破解模板来使django-adminfiles工作。我觉得我的django配置有问题,但我不知道是什么。

1 个答案:

答案 0 :(得分:0)

你在这里有一个“小”混乱。

如果您设置了STATIC_URL ='/ static /',那么我必须找到所有静态文件的保护伞:

/static/blog/a_public_file.jpg
/static/adminfiles/DD.jpg
/static/other/app/file.jpg

还记得你可以添加静态文件查找器https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders,你已经可以使用该设置,有时使用STATICFILES_DIRS会让人感到困惑。

我建议您在继续之前从头开始查看所有静态文件。