Django没有认识到MEDIA_URL路径?

时间:2010-01-11 04:18:13

标签: 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',
)

8 个答案:

答案 0 :(得分: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/并看到它有什么

答案 1 :(得分:13)

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

docs中的示例:

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

答案 2 :(得分:7)

看起来ars已经回答了你的真正的问题......但是你会遇到另一个问题:MEDIA_URL必须与ADMIN_MEDIA_PREFIX 不同 。如果不是,则ADMIN_MEDIA_PREFIX优先。我通常会将ADMIN_MEDIA_PREFIX更改为/admin-media/

来解决此问题

答案 3 :(得分:6)

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

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.media',
)

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

TEMPLATE_DEBUG = True

答案 4 :(得分:4)

请仔细阅读官方Django DOC,你会找到最合适的答案。

解决此问题的最佳和最简单的方法如下所示。

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

相关网址为:https://docs.djangoproject.com/en/1.5/howto/static-files/#serving-files-uploaded-by-a-user

答案 5 :(得分:3)

非常感谢大家的帮助。我能够解决它

settings.py - &gt;

MEDIA_ROOT = '/home/patrick/Documents/code/projects/test/media/'
MEDIA_URL = 'http://localhost:8000/media/'

urls.py - &gt;

(r'^media/(?P<path>,*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),

index.html - &gt;

img src="/media/images/logo.jpg"

再次,非常感谢,我疯狂地试图找出如何做到这一切。这个解决方案适用于运行Ubuntu 10.04的Django 1.2.5版开发服务器。

答案 6 :(得分:0)

我有类似的问题, 我有一个单页应用程序,显然我有一个新手的错误,让django错过了我的媒体路径我有这个:

url(r'^', home, name="home"),

而不是:

url(r'^$', home, name="home"),

丢失的$使我的网址模式错过了我的媒体网址

答案 7 :(得分:0)

I was also having the same problem, this is how I got it done.

If you are using a FileField in your model class instead of MEDIA_URL use .url member to access the url of your file. For eg: something like this

// Fonts
@site-font: Arial !important ;
@site-font-bold: Arial !important ;
@site-font-light: Arial !important ;
@site-font-italic: Arial !important ;
@site-font-bold-italic: Arial !important ;
@site-font-light-italic: Arial !important ;

here file_name is the FileField in model class.