Django 不识别 MEDIA_URL 路径?

8 投票
8 回答
15788 浏览
提问于 2025-04-15 17:52

我正在尝试在一个简单的视图函数中运行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 个回答

7

看起来ars已经回答了你真正的问题……但是你会遇到另一个问题:MEDIA_URL必须和ADMIN_MEDIA_PREFIX不一样。如果它们相同的话,ADMIN_MEDIA_PREFIX会优先使用。通常我会通过把ADMIN_MEDIA_PREFIX改成/admin-media/来解决这个问题。

22

看起来你正在使用调试服务器(你的网址是 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/ 看看那里有没有东西。

13

你可以像其他人建议的那样,手动把它传递给模板,或者确保你使用的是 RequestContext,而不是普通的 Context。使用 RequestContext 的好处是,它会自动把一些特定的变量填充到上下文中,比如 MEDIA_URL 以及其他和媒体相关的变量。

下面是文档中的一个例子:

def some_view(request):
    # ...
    return render_to_response('my_template.html',
                              my_data_dictionary,
                              context_instance=RequestContext(request))

撰写回答