我正在建立一个Dev-blog来存储和参考我为我的投资组合编码的项目,我一直在尝试为我的帖子文本框添加媒体上传功能。我开始使用一个标准的RichTextField,它有一个内置的功能,可以通过URL添加图像(不需要上传)。它运行得很好,但我希望有从我的机器上传照片的功能。
博客是完全可操作的(在本地服务器上进行开发),因此所有不相关的代码都被忽略。
唯一的问题是设置路径到我的图像文件。
models.py
从django.db导入模型django。Utils导入时区django。url反向导入从ckeditor_uploader。导入RichTextUploadingField类职位(models.Model):作者= models.ForeignKey (auth.User, on_delete = models.CASCADE)title = models.CharField (max_length = 40)text = RichTextUploadingField()create_date = models.DateTimeField(default=timezone.now())publication_date = models.DateTimeField(blank=True,null=True)def发布(自我):self.publication_date = timezone.now ()self.save ()def approve_comment(自我):返回self.comments.filter (approved_comment = True)def __str__(自我):返回self.titledef get_absolute_url(自我):Return reverse('post_detail', kwargs={'pk':self.pk})def ckeditor_upload(自我):返回反向(post_detail, kwargs ={"pk":self.pk})
urls . py
<>以前django。贡献导入管理django。url导入路径、include、re_path从django.contrib.auth导入视图url模式= [路径(admin/, admin.site.urls),路径(",包括(blog.urls)),路径(/登录/账户,views.LoginView.as_view (template_name =注册/login.html), name = '登录'),path('accounts/logout/',views.LogoutView.as_view(),name='logout',kwargs={'next_page':'/'}), #{'next_page':'/'}使其返回主页re_path (r ' ^ ckeditor/',包括(ckeditor_uploader.urls)),) 以前**settings.py**
<pre>
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'ckeditor',
'ckeditor_uploader',
'blog'
]
#
#
#
CKEDITOR_UPLOAD_PATH = 'media/uploads'
The file is being uploaded to a new media directory in the project folder, but it is trying to load it from within the app folder.
<pre>
[20/Sep/2021 02:58:14] "POST /ckeditor/upload/ HTTP/1.1" 200 86
Not Found: /media/uploads/2021/09/20/kaki.jpg
[20/Sep/2021 02:58:14] "GET /media/uploads/2021/09/20/kaki.jpg HTTP/1.1" 404 4602
Not Found: /media/uploads/2021/09/20/kaki.jpg
[20/Sep/2021 02:58:14,942] - Broken pipe from ('127.0.0.1', 54571)
我试过了:
CKEDITOR_UPLOAD_PATH = 'blog/media/uploads'
-相同的结果,但在博客(应用程序)文件夹。- 手动移动图像文件到应用程序的媒体目录-图像加载,但这有点没有意义
- 添加根变量
MEDIA_URL='/media/'MEDIA_ROOT = os.path.join (BASE_DIR博客/媒体)CKEDITOR_UPLOAD_PATH = 'uploads'
-相同错误[20/Sep/2021 03:34:48] "POST/ckeditor/upload/HTTP/1.1"200 95未找到:/blog/media/uploads/2021/09/20/linkdn.jpg[20/Sep/2021 03:34:48] "GET/blog/media/uploads/2021/09/20/linkdn.jpg HTTP/1.1"404 4623未找到:/blog/media/uploads/2021/09/20/linkdn.jpg[20/Sep/2021 03:34:48] "GET/blog/media/uploads/2021/09/20/linkdn.jpg HTTP/1.1"404 4623
- 尝试在文档 中查找
将CKEDITOR_UPLOAD_PATH设置添加到项目的settings.py文件中。此设置指定CKEditor媒体上传目录的相对路径。CKEditor使用Django的存储API。默认情况下,Django使用文件系统存储后端(它会使用你的MEDIA_ROOT和MEDIA_URL),如果你不使用不同的后端,你必须对MEDIA_ROOT中的CKEDITOR_UPLOAD_PATH路径有写权限,即:CKEDITOR_UPLOAD_PATH = "上传/"当使用默认文件系统存储时,图像将被上传到MEDIA_ROOT中的"uploads"文件夹中,url将根据MEDIA_URL (/media/uploads/image.jpg)创建。如果你想要能够控制文件名的生成,你必须在你的设置中添加一个自定义的文件名生成器:-没有工作。
- 尝试上传数据-弄得一团糟。
指导问题:
如果
CKEDITOR_UPLOAD_PATH
是上传路径,我可以指定一个加载路径,或者我留下MEDIA ROOT
是否有控制加载路径的默认值?
是否有一个不同的富文本和上传框,将更适合?
提前感谢任何帮助的人!<3
SOLVED
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #Without this the MEDIA's URL is not recognized!!!
未添加到URL中,因此在表单请求时无法识别URL !