使用django runserver开发服务器时如何提供静态文件?

时间:2013-07-18 02:51:40

标签: django

我正在使用django 1.5

我可以在生产中提供文件,因为它是在apache级别处理的。这是我的httpd.conf文件:

<VirtualHost *:80>
WSGIScriptAlias / /home/membership/membership/wsgi.py

Alias /static/ "/home/membership/static/"


<Directory /home/membership/static>
Order deny,allow
Allow from all
</Directory>

<Directory "/usr/lib/python2.6/site-packages/django/contrib/admin/static/admin">
    Order deny,allow
    Allow from all
</Directory>

<Directory /home/membership/membership>
<Files wsgi.py>
Order deny,allow
Satisfy Any
Allow from all
</Files>
</Directory>
</VirtualHost>

由于Alias /static/ "/home/membership/static/"

,这在生产中效果很好

当我尝试在我的本地开发环境中运行应用程序时,我无法让它提供静态文件我只是得到一个页面找不到404错误。我猜这是因为当我在本地开发时,请求直接进入开发服务器,因为没有使用apache。

enter image description here

我在/static/me.png有一个文件。

我是否应该指定在开发中提供静态文件的地方?

运行python manage.py collectstatic时,似乎只收集管理员应用的静态文件。我有一个文件直接在我试图服务的/ app / static目录中。

4 个答案:

答案 0 :(得分:9)

您是否在网站设置中定义了静态文件的路径?我的意思不是网址/static/,我的意思是STATICFILES_DIR(它告诉你的devserver,静态文件就像配置文件告诉apache

最好只关注文档,这绝对是绝对的:

Documentation

答案 1 :(得分:7)

如果您在开发期间提供静态文件

settings.py 文件中:

# Add it on your settings.py file
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"), # your static/ files folder
]

示例:

enter image description here

在您的根 urls.py 文件中:

# add these lines
from django.conf import settings
from django.conf.urls.static import static

# Add +static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

示例:

enter image description here

这不适合生产使用!查看更多:https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-during-development

对于媒体/ 目录中的媒体文件: https://docs.djangoproject.com/en/dev/howto/static-files/#serving-files-uploaded-by-a-user-during-development

答案 2 :(得分:5)

urls.py中,只需在底部添加:

if settings.DEBUG:
urlpatterns += patterns('',
    (r'^stati_directory/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root':settings.STATIC_ROOT}),)

确保DEBUG = True

答案 3 :(得分:-1)

settings.py文件中更新以下行。

STATIC_URL = '/static/'
MEDIA_URL = '/static/media/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,’’)]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media')
  1. 在static中创建一个名为media的文件夹,并将所有媒体文件保存在其中。
  2. 运行 python manage.py collectstatic 以收集所有第三方应用程序静态文件,包括django admin静态文件。
  3. 在主url.py中添加以下行作为网址。

    from django.conf.urls.static import static
    from django.conf import settings
    
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)