我是 Django 新手,正在处理我的第一个项目,但遇到静态文件问题。
我使用 django.contrib.auth
创建了一个简单的身份验证系统由两个模板组成:mysite/templates/index.html
和 mysite/templates/registration/login.html
.我在 mysite/static
中有全局静态内容我希望能够访问所有应用呈现的所有模板。
mysite/templates/index.html
包含 <img src="{{ STATIC_URL }}pics03.jpg"/>
呈现为 "static/pics03.jpg"
当我访问 url localhost:8000/
时加载正常
mysite/templates/registration/login.html
包含 <img src="{{ STATIC_URL }}pics03.jpg"/>
这也呈现为 "static/pics03.jpg"
当我访问 url "localhost:8000/accounts/login/"
时不加载
在我的 urls.py 中我有:
urlpatterns = patterns('',
url(r'^$', 'mysite.views.home'), # plays index.html template
url(r'^accounts/login/$', 'django.contrib.auth.views.login'),
在我的 settings.py 中我有:
PROJECT_DIR = os.path.dirname(__file__)
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(PROJECT_DIR,'static'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
STATIC_URL = '/static/'
STATIC_ROOT = ''
我的印象是 Django 应该在 STATICFILES_DIRS 中寻找全局静态内容,但即使我将其中的 url 更改为静态文件夹的绝对路径,它也找不到 login.html 的静态内容。任何人都可以阐明这一点吗?
最佳答案
您的问题是您没有在 urls.py 中的任何地方收听 URL“/static/”
如果您通过网络服务器(如 apache 或 nginx)为您的应用程序提供服务,那么这是正常的,因为网络服务器会自行处理静态文件。
对于开发,Django 带有一个内置的静态服务器
到urls.py,在最后添加
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
它的作用是添加/static/url 并让您为没有网络服务器的用户提供服务。
这相当于
url(
regex=r'^static/(?P<path>.*)$',
view='django.views.static.serve',
kwargs={'document_root': settings.STATIC_ROOT,}
)
有些人会告诉您,您需要将 URL 规则包装在“if settings.DEBUG”中才能使用仅限开发人员的规则,但这根本不需要,实际上我发现这是一个糟糕的建议。
关于python - Django 静态文件不会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216827/