【问题标题】:Django 1.3 Static FilesDjango 1.3 静态文件
【发布时间】:2013-02-18 01:09:49
【问题描述】:

就像关于 Django 1.3 的第 10 亿个静态文件问题。我一直在寻找和尝试很多东西,但似乎没有什么对我有用。任何帮助,将不胜感激。将尝试提供尽可能多的信息。

网址文件

urlpatterns = patterns('',
url(r'^projectm/statictest/$','project_management.views.statictest'),)

查看

def statictest(request):
return render_to_response('statictest.html',locals())

模板

<html><head><title>Static Load Test Page</title></head>
<body>
{% load static %}
<img src="{{ STATIC_URL }}testimage.jpg" />
</body></html>

设置

STATIC_ROOT = '/home/baz/framework/mysite/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = ('',)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
TEMPLATE_DIRS = (
"/home/baz/framework/mysite/templates"

文件

-bash-3.2$ pwd
/home/baz/framework/mysite/templates
statictest.html

-bash-3.2$ pwd
/home/baz/framework/mysite/project_management/static
-bash-3.2$ ls
testimage.jpg

不太确定是否还有其他有用的信息。但基本上当我去这个测试页面并检查页面源时,url指向的是

<img src="/static/testimage.jpg" />

但是图像无法加载。我也在多个浏览器上试过这个。也许我在某处遗漏了一个 imort 语句?

为帮助喝彩

【问题讨论】:

    标签: python django


    【解决方案1】:

    您是使用内置的runserver 命令还是以其他方式为 Django 应用程序提供服务?

    如果您使用runserver,那么您的问题是您没有告诉 Django 在文件系统中哪里可以找到您的静态资产。您需要将 STATIC_ROOT 设置为可以找到静态资产的文件系统路径。尝试将其设置为:/home/baz/framework/mysite/project_management/static/

    如果您使用不同的服务器(例如 Nginx 后面的 gunicorn),那么前端服务器负责拦截对 /static/ 的请求并为您提供服务。

    【讨论】:

    • STATIC_ROOT 是 runserver 查找要服务的文件的位置(仅在 DEBUG=True 时有效)。这也是 Django 在 collectstatic 期间复制静态文件的地方。默认情况下,collectstatic 命令会在每个应用程序的 /static/ 以及 STATICFILES_DIRS 中列出的任何目录中查找静态文件。
    • 是的,我使用的是内置的运行服务器。
    【解决方案2】:

    还记得在设置“STATIC_ROOT”后运行“collectstatic”管理命令。

    https://docs.djangoproject.com/en/1.4/howto/static-files/#deploying-static-files-in-a-nutshell

    【讨论】:

    • 嗨,好的,所以我更新了配置文件中的 STATIC_ROOT 设置。执行了 python manage.py collectstatic。我可以看到它已经从我的应用程序静态文件夹中收集了 testimage,但是当我刷新页面时,图像仍然没有加载,并且路径只是 imgsrc='testimage.jpg' 。
    • 由于您使用内置的运行服务器对此进行测试,您需要稍微调整一下您的 urls.py,see here。现在一旦完成并且您的服务器正在运行,请尝试通过转到http://your-url/static/testimage.jpg 直接访问图像 - 如果可以正常工作但模板仍然输出“src='testimage.jpg'”而不是“src='/static /testimage.jpg'" 那么你在渲染模板时没有使用 RequestContext,see here.
    • 我认为这可能与权限有关,因此我尝试将静态目录更改为 777,但无济于事。
    • 试试{% get_static_prefix %}。参考:stackoverflow.com/questions/5457737/…
    • 嘿,马特,我将 imgsrc 更改为“/static/testimage.jpg”,它似乎有效。它将它从项目应用程序文件夹中拉出来。但是当我使用静态标签时,它会再次中断。我确定我在设置中做错了什么。谢谢
    猜你喜欢
    • 2012-04-09
    • 2011-08-29
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2014-02-26
    • 2021-03-18
    • 1970-01-01
    相关资源
    最近更新 更多