Pop-ups in django-tinymce editor showing 404 error

664 views Asked by At

What is wrong:

I have installed django-tinymce to work with text fields in the admin section of my site. The editor works good, though not as expected, because whenever I try to insert an image, link, symbol etc. - that is, whenever a pop-up is ensued - editor opens a 404 Not found window instead of actual widget form.

What I have tried:

I 've tried adding

document.domain = 'my_site.com';

to tiny_mce_popup.js. Nothing changed.

Interestingly enough, the *.htm files, which are supposed to open in pop-up windows, are stored in the directory {{ MEDIA_URL }}js/tiny_mce/themes/advanced/ (as I've mentioned, server doesn't open them). But if I try and open in browser other files from that very same directory (e.g. {{ MEDIA_URL }}js/tiny_mce/themes/advanced/editor_template.js or {{ MEDIA_URL }}js/tiny_mce/themes/advanced/img/flash.gif), everything works - the files are displayed without any error.

In addition, on local server everything works just fine - the problem is encountered only after deployment.

Code that might help identifying the problem:

Project's urls.py:

urlpatterns = patterns('',
    #...
    url(r'^tinymce/', include('tinymce.urls')),
    #...
)

TinyMCE's urls.py:

from django.conf.urls.defaults import *

urlpatterns = patterns('tinymce.views',
    url(r'^js/textareas/(?P<name>.+)/$', 'textareas_js', name='tinymce-js'),
    url(r'^js/textareas/(?P<name>.+)/(?P<lang>.*)$', 'textareas_js', name='tinymce-js-lang'),
    url(r'^spellchecker/$', 'spell_check'),
    url(r'^flatpages_link_list/$', 'flatpages_link_list'),
    url(r'^compressor/$', 'compressor', name='tinymce-compressor'),
    url(r'^filebrowser/$', 'filebrowser', name='tinymce-filebrowser'),
    url(r'^preview/(?P<name>.+)/$', 'preview', name='tinymce-preview'),
)

TinyMCE's settings.py:

import os
from django.conf import settings

DEFAULT_CONFIG = getattr(settings, 'TINYMCE_DEFAULT_CONFIG',
        {'theme': "advanced", 'relative_urls': False})

USE_SPELLCHECKER = getattr(settings, 'TINYMCE_SPELLCHECKER', False)

USE_COMPRESSOR = getattr(settings, 'TINYMCE_COMPRESSOR', False)

USE_FILEBROWSER = getattr(settings, 'TINYMCE_FILEBROWSER',
        'filebrowser' in settings.INSTALLED_APPS)

JS_URL = getattr(settings, 'TINYMCE_JS_URL',
        '%sjs/tiny_mce/tiny_mce.js' % settings.MEDIA_URL)

JS_ROOT = getattr(settings, 'TINYMCE_JS_ROOT',
        os.path.join(settings.MEDIA_ROOT, 'js/tiny_mce'))


JS_BASE_URL = JS_URL[:JS_URL.rfind('/')]

So how do I make django-tinymce's pop-ups work? Thanks in advance for your help!

EDIT: Solution found. Turns out my hosting provider didn't include htm(l) in allowed static files extensions list. Now everything's working.

1

There are 1 answers

2
hellsgate On BEST ANSWER

The fact that it is working under the development server, but not live, leads me to think that you haven't set up the media root properly in your apache conf. The development server automatically serves your media and static files but for your live deployment you need to add the media and static aliases with the relevant path.

vhost.conf:

<VirtualHost *:80>
    # Your setup for your main site url, then add the below to allow access
    # to the media and static roots

    Alias /media/ "/path/to/myproject/media/"
    <Directory "/path/to/myproject/media/">
        Order deny,allow
        Allow from all
    </Directory>

    Alias /static/ "/path/to/myproject/static/"
    <Directory "/path/to/myproject/static/">
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>