17👍
Using CKEDITOR_UPLOAD_PATH = 'uploads/'
makes django-ckeditor to upload an image to /media/uploads/
, like:
settings.py:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static/'),
]
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'
CKEDITOR_UPLOAD_PATH = 'uploads/'
When using the Django’s dev server, static files are served by default but not media files, so you can force the server to consider them, the url configuration below should work.
urls.py:
from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.views.static import serve
from .views import HomeView
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', HomeView.as_view(), name='home'),
url(r'^ckeditor/', include('ckeditor_uploader.urls')),
# serving media files only on debug mode
if settings.DEBUG:
urlpatterns += [
url(r'^media/(?P<path>.*)$', serve, {
'document_root': settings.MEDIA_ROOT
}),
]
The missing function patterns
from the old example was an old function I believe used on Django 1.6 or 1.7.
7👍
After installing ckeditor, perform the following :
In Settings.py:
add ‘ckeditor‘ and ‘ckeditor_uploader‘ into INSTALLED_APPS.
Add CKEDITOR_UPLOAD_PATH = ‘uploads_directory/‘
(Do not join MEDIA_ROOT with the upload_directory, ckeditor will take the MEDIA_ROOT as its root upload directory)In your models files:
USE :from ckeditor_uploader import RichTextUploadingField
and modify your required model field to type RichTextUploadingFieldIn urls.py:
addre_path(r'^ckeditor/', include('ckeditor_uploader.urls'))
into urlpatterns
- Django: How to get data connected by ForeignKey via Template?
- How can I test if my redis cache is working?
- Using User.objects.get_or_create() gives invalid password format in django?
4👍
Using Django 1.8 with django-ckeditor 5.3.0, I was getting the exact same symptoms as those above (uploading files worked, but the src
attribute of the <img>
tag was set incorrectly, causing a red “X” in the preview and broken image links upon publication).
In my case, however, I didn’t have to change anything in urls.py
. My problem was that I had:
CKEDITOR_UPLOAD_PATH = os.path.join(MEDIA_ROOT, "ckeditor")
So my mistake was giving CKEDITOR_UPLOAD_PATH the path where I wanted ckeditor to upload to (logical, no?).
The fix was to change the above line to
CKEDITOR_UPLOAD_PATH = "ckeditor"
In hindsight I can see how this allows django-ckeditor the ability to use the MEDIA_ROOT for uploading and the MEDIA_URL for serving. Still I thought someone should say it: “Don’t use the full path when setting CKEDITOR_UPLOAD_PATH
!”
I hope this saves others some time.
- What permissions does django-storages require for an s3 IAM user?
- What is the difference between south migrations and django migrations?
- CORS django 'Access-Control-Allow-Origin'
- Django Model " has more than one ForeignKey to "
3👍
For Django 4 the steps to enable image or file upload in django-ckeditor
is:
1. Install django-ckeditor
pip install django-ckeditor
2. Update settings.py
Add file upload path:
CKEDITOR_UPLOAD_PATH = "uploads/"
Add ckeditor
,ckeditor_uploader
in INSTALLED_APPS
:
INSTALLED_APPS = [
...
# plugins
'ckeditor',
'ckeditor_uploader'
]
3. Update urls.py
Add path('ckeditor/', include('ckeditor_uploader.urls'))
in urlpatterns
:
urlpatterns = [
...
path('ckeditor/', include('ckeditor_uploader.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
4. Use RichTextUploadingField
in models
from ckeditor_uploader.fields import RichTextUploadingField
class ResearchTopic(models.Model):
title = models.CharField(max_length=200)
description = RichTextUploadingField()
Tested with:
Django==4.0.4
django-ckeditor==6.4.0
References:
2👍
The @Mohammed-tayab’s solution worked for me with a little modification:
from ckeditor_uploader.fields import RichTextUploadingField
- Refresh <div> element generated by a django template
- Testing Django email backend
- How to access an attribute of an object using a variable in django template?