Django没有认识到MEDIA_URL路径?

rk9*_*919 8 python django tinymce

所以我试图在一个简单的视图函数上启动并运行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',
)
Run Code Online (Sandbox Code Playgroud)

luc*_*luc 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}),
)
Run Code Online (Sandbox Code Playgroud)

'show_indexes':True选项可以浏览您的媒体.转到您的媒体根http://127.0.0.1:8000/media/,看看它有什么


Ben*_*pan 13

您可以像其他人建议的那样手动将其传递给模板,也可以确保使用的是RequestContext而不是普通的Context.RequestContext将使用某些变量(包括MEDIA_URL和其他与媒体相关的变量)自动填充上下文.

来自docs的示例:

def some_view(request):
    # ...
    return render_to_response('my_template.html',
                              my_data_dictionary,
                              context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)


Dav*_*ver 7

它看起来像ARS已经回答了你真正的问题...但你会碰到另一个问题:MEDIA_URL必须是不同ADMIN_MEDIA_PREFIX.如果不是,则ADMIN_MEDIA_PREFIX优先.我通常通过更改ADMIN_MEDIA_PREFIX为修复此问题/admin-media/.


ars*_*ars 6

您的设置中是否有媒体上下文处理器?

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.media',
)
Run Code Online (Sandbox Code Playgroud)

您也可以尝试在设置中添加以下内容,以查看调试消息是否显示任何内容:

TEMPLATE_DEBUG = True
Run Code Online (Sandbox Code Playgroud)