我发现了很多关于如何做到这一点的不同例子,他们所说的设置为MEDIA_URL,STATIC_URL,MEDIA_ROOT,MEDIA_URL的情况略有不同。我的项目文件结构如下:
myproject/
images/ (user-uploaded)
media/ (empty so far)
settings.py
static/
css/
styles.css
fonts/
templates/
auth/
base.html
login.html
index.html
urls.py
当然,根文件夹中有app目录。为了让我的图像显示在索引模板上,我这样做了:
urls.py:
from django.conf import settings
(r'%s(?P<path>.*)' % settings.MEDIA_URL[1:], 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
settings.py(这些是默认设置):
MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'
我正在制作的网站只是一页的前端。如何让样式表正确链接?我不确定所有这些目录设置之间有什么区别,或者为什么我会使用另一个...或者最好的方法(如果有的话)是构建整个事物,在哪里放置css, javascript,字体,静态图片,用户上传的图片等
答案 0 :(得分:3)
在Django 1.3之前,只有两个设置很重要:
MEDIA_ROOT :媒体文件的绝对文件系统路径
MEDIA_URL :包含或不包含域名的媒体文件的绝对网址
后Django 1.3,引入了staticfiles contrib包,这对于第一次来说非常混乱。您需要以下设置:
MEDIA_ROOT :用户上传的绝对文件系统路径
MEDIA_URL :用户上传的绝对网址,包含或不包含域
STATIC_ROOT :静态文件目录的绝对文件系统路径。 这是
collectstatic
管理命令使用的文件夹。 请勿在此处手动输入任何文件。STATIC_URL :静态文件目录的绝对URL,带或 没有域名
然后,对于每个应用程序,在内部创建一个“静态”目录,这个是静态文件所在的目录。在开发过程中,Django会自动在STATIC_URL
下提供这些文件。在生产中,您必须运行collectstatic
管理命令,将它们全部移动到项目的“静态”目录,然后是STATIC_URL
下的服务器。
这一切都很好,但你可能会注意到这并不能真正涵盖所有事情。总是项目范围内的静态文件不一定属于一个应用程序或另一个应用程序,但默认的静态文件设置并没有给你任何放置它们的地方。因此,您可以通过其他设置自行解决问题:
STATICFILES_DIRS = (
"/absolute/path/to/myproject/assets/",
)
在这里,我已经找到了一个名为'assets'的目录,用于项目范围的静态文件。您可以将目录命名为您喜欢的名称,但它不能与STATIC_ROOT
相同。
让人们吵架的最后一点是为管理媒体提供服务。您需要做的就是设置:
ADMIN_MEDIA_PREFIX = STATIC_URL+'admin/'
答案 1 :(得分:2)
媒体用于用户上传的文件,静态 - 用于CSS和其他文件,因此您必须为静态文件(如js和css)创建目录。
你已经做好了所有的事情,因为在Django的官方文档中有类似的东西。我将离开我朋友告诉我的方式,在几台机器中为静态文件提供服务:
# settings.py
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(PROJECT_DIR, 'models'))
PROJECT_URL = 'http://127.0.0.1:8000'
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
MEDIA_URL = PROJECT_URL + '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
STATIC_URL = PROJECT_URL + '/static/'
ADMIN_MEDIA_PREFIX = PROJECT_URL + '/static/admin/'
# Additional locations of static files
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR, 'static'),
os.path.join(PROJECT_DIR, 'media'),
)
# urls.py
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_ROOT}),
)