Django找不到静态文件夹中的文件
我想我漏掉了什么。
这是我的文件夹应该长的样子:
显然是带有所需图片的。
为了提高可移植性,我在代码中使用了动态路径。
在 settings.py
中的代码:
SETTINGS_DIR = os.path.dirname(__file__)
PROJECT_PATH = os.path.join(SETTINGS_DIR, os.pardir)
PROJECT_PATH = os.path.abspath(PROJECT_PATH)
TEMPLATE_PATH = os.path.join(PROJECT_PATH, 'templates')
TEMPLATE_DIRS = (
TEMPLATE_PATH,
)
STATIC_PATH = os.path.join(PROJECT_PATH,'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
STATIC_PATH,
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rango'
urls.py
:
from django.conf.urls import patterns, url
from rango import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),url(r'^rango/', views.about, name='about'))
views.py
:
def index(request):
context = RequestContext(request)
# Construct a dictionary to pass to the template engine as its context.
# Note the key boldmessage is the same as {{ boldmessage }} in the template!
context_dict = {'boldmessage': "I am bold font from the context"}
# Return a rendered response to send to the client.
# We make use of the shortcut function to make our lives easier.
# Note that the first parameter is the template we wish to use.
return render_to_response('rango/index.html', context_dict, context)
def about(request):
return HttpResponse("Rango says: This is about page!<a href='../../'>Index</a>")
注意,图片是放在一个 HTML 模板中的。HTML 是正常加载的,但图片却没有显示。
<!DOCTYPE html>
{% load static %} <!-- New line -->
<html>
<head>
<title>Rango</title>
</head>
<body>
<h1>Rango says...</h1>
hello world! <strong>{{ boldmessage }}</strong><br />
<a href="/rango/about/">About</a><br />
<img src="{% static "rango.png" %}" alt="Picture of Rango" /> <!-- New line -->
</body>
</html>
结果是什么呢?
图片返回了一个讨厌的 404
错误。
从 127.0.0.1:8000/static/rango.png
或者 manage.py findstatic rango.png
访问都会失败。
不过,从 file:///D:/tango_with_django_project/static/rango.png
访问却是成功的。
谢谢!
附加信息:
DEBUG=TRUE
我检查过 STATIC_PATH
,文件确实指向了正确的路径 D:\tango_with_django_project\static
这可能是因为反斜杠和正斜杠的问题,但如果斜杠是问题的话,模板也应该会出错。
2 个回答
1
这个问题可能是因为找不到应用程序的目录。你可以在项目的 setting.py 文件中添加以下内容:
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
3
在实际使用中,静态文件应该由网络服务器来提供,而不是由Django自己来处理。这就是为什么默认情况下没有开启这个功能。
你需要告诉开发服务器,它必须提供静态文件。我觉得在你的 settings.py
文件中把 DEBUG=True
设置成这样就可以了。
你可能还需要在你的 urls.py
文件中添加一些内容。
from django.conf.urls import patterns, include, url
from django.conf import settings
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'your_app.views.home', name='home'),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls))
)
if settings.DEBUG :
urlpatterns += patterns('django.contrib.staticfiles.views',
url(r'^static/(?P<path>.*)$', 'serve'),
)
希望这些信息对你有帮助。