Django 不识别 MEDIA_URL 路径?
我正在尝试在一个简单的视图函数中运行TinyMCE,但tiny_mce.js文件的路径出现了问题。这个文件的位置在 /Users/home/Django/tinyMCE/media/js/tiny_mce/tiny_mce.js。我认为 /media/js/tiny_mce/tiny_mce.js 是正确的,因为开发服务器无法访问Django项目文件夹根目录以上的文件。在渲染的页面中,调试器显示找不到这个javascript文件。这是因为它试图通过 /js/tiny_mce/tiny_mce.js 来查找,而没有考虑到路径中的 /media/ 部分。
无论如何,这里是一个名为 'simple.html' 的模板中的javascript脚本片段。<script type="text/javascript" src="{{ MEDIA_URL }}/js/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
mode : "textareas",
theme : "simple"
});
</script>
这是我设置中的重要部分。
MEDIA_ROOT = os.path.join(_base, 'media')
MEDIA_URL = 'http://127.0.0.1:8000/media/'
ADMIN_MEDIA_PREFIX = '/media/'
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'tinymce',
)
8 个回答
看起来ars已经回答了你真正的问题……但是你会遇到另一个问题:MEDIA_URL
必须和ADMIN_MEDIA_PREFIX
不一样。如果它们相同的话,ADMIN_MEDIA_PREFIX
会优先使用。通常我会通过把ADMIN_MEDIA_PREFIX
改成/admin-media/
来解决这个问题。
看起来你正在使用调试服务器(你的网址是 http://127.0.0.1:8000/..)。你在你的 urls.py 文件中安装了静态文件服务吗?
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes':True}),
)
将 'show_indexes':True 这个选项设置为真,可以让你浏览你的媒体文件。去你的媒体根目录 http://127.0.0.1:8000/media/ 看看那里有没有东西。
你可以像其他人建议的那样,手动把它传递给模板,或者确保你使用的是 RequestContext,而不是普通的 Context。使用 RequestContext 的好处是,它会自动把一些特定的变量填充到上下文中,比如 MEDIA_URL 以及其他和媒体相关的变量。
下面是文档中的一个例子:
def some_view(request):
# ...
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))