当前位置: 首页 > 知识库问答 >
问题:

为什么我的上传目录是相对于项目目录的,而Django正试图从与应用程序相关的路径获取它?

袁耀
2023-03-14

我正在建立一个开发博客来存储和引用我为我的投资组合编写的项目,我一直在尝试向我的帖子文本框添加媒体上传功能。我首先使用了一个标准的RichTextField,它有一个内置的功能,可以通过URL添加图像(无需上传)。它工作得很好,但我希望能够从我的机器上传照片。

博客是完全可操作的(在本地服务器上进行开发),所以所有不相关的代码都被忽略了。

唯一的问题是设置我的图像文件的路径。

models.py


    from django.db import models
    from django.utils import timezone
    from django.urls import reverse
    from ckeditor_uploader.fields import RichTextUploadingField
    
    class Post(models.Model):
        author=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 publish(self):
            self.publication_date=timezone.now()
            self.save()
    
        def approve_comment(self):
            return self.comments.filter(approved_comment=True)
    
        def __str__(self):
            return self.title
        
        def get_absolute_url(self):
            return reverse('post_detail', kwargs={'pk':self.pk})
    
        def ckeditor_upload(self):
            return reverse('post_detail', kwargs={'pk':self.pk})

网址。派克


    from django.contrib import admin
    from django.urls import path,include,re_path
    from django.contrib.auth import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('',include('blog.urls')),
        path('accounts/login/',views.LoginView.as_view(template_name='registration/login.html'),name='login'),
        path('accounts/logout/',views.LogoutView.as_view(),name='logout',kwargs={'next_page':'/'}), #{'next_page':'/'} makes it go back to homepage
        re_path(r'^ckeditor/', include('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' - Same results but inside the blog(app) folder.
  • Moving the image file manually to the apps media directory - the image loaded, but that's kinda pointless
  • Adding root variables
    MEDIA_URL='/media/'
    MEDIA_ROOT= os.path.join(BASE_DIR,'blog/media')
    CKEDITOR_UPLOAD_PATH = 'uploads'
    
    [20/Sep/2021 03:34:48] "POST /ckeditor/upload/ HTTP/1.1" 200 95
    Not Found: /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
    Not Found: /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
    Add a CKEDITOR_UPLOAD_PATH setting to the project’s settings.py file. This setting specifies a relative path to your CKEditor media upload directory. CKEditor uses Django’s storage API. By default, Django uses the file system storage backend (it will use your MEDIA_ROOT and MEDIA_URL) and if you don’t use a different backend you have to have write permissions for the CKEDITOR_UPLOAD_PATH path within MEDIA_ROOT, i.e.:
    
    CKEDITOR_UPLOAD_PATH = "uploads/"
    
    When using default file system storage, images will be uploaded to the “uploads” folder in your MEDIA_ROOT and URLs will be created against MEDIA_URL (/media/uploads/image.jpg).
    
    If you want to be able to have control over filename generation, you have to add a custom filename generator to your settings: 
    
    • 尝试上传到statics-弄得一团糟

    指导性问题:

    >

  • 如果CKEDITOR_UPLOAD_PATH是上传路径,我可以指定一个加载路径,还是我只剩下MEDIA ROOT

    是否有控制加载路径的默认值?

    是否有一个不同的富文本和上传框,将适合更好?

    提前感谢任何有帮助的人!

共有1个答案

米景辉
2023-03-14

解决了的

urlpatterns += static(settings.MEDIA_URL,  document_root=settings.MEDIA_ROOT) #Without this the MEDIA's URL is not recognized!!!

添加到URL,因此在表单请求时无法识别URL!

 类似资料:
  • 我的程序从不是项目根目录的位置读入文档。文档包含一个相对路径。当程序应用该路径时,它确实从项目的根目录开始。如何使其应用来自文档原始位置的路径? 以下是细节。有点长,但很简单。 我在Eclipse中有一个Java项目,位于 该程序运行一个XSL转换,该转换以Schematron模式作为输入,并产生一个新的XSLT样式表作为输出 它包含这一行,还有几条类似的: 如果从模式的位置开始,并应用该相对路径

  • 本文向大家介绍Symfony2获取web目录绝对路径、相对路径、网址的方法,包括了Symfony2获取web目录绝对路径、相对路径、网址的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Symfony2获取web目录绝对路径、相对路径、网址的方法。分享给大家供大家参考,具体如下: 对于你的需求,Symfony2通过DIC提供了kernel服务,以及request(请求)的封装。 在co

  • 问题内容: 我正在尝试使用相对路径来定位Java类中的可执行文件,而不是有效的硬编码行,但是使用类似以下内容的方法: 失败…在Java中使用相对路径的正确方法是什么? 问题答案: 最可能的解释是您当前的目录不在您认为的位置。您可以检查user.dir的系统属性以查看应用程序的基本路径是什么,或者可以执行以下操作: 在使用该相对路径调试相对引用的起始位置之前。

  • 问题内容: 仅选择目录,如何使用JFileChooser获取目录的绝对路径? 问题答案: 用: 和…一起: 然后调用返回的对象。

  • 本文向大家介绍linux中目录与路径常见相关命令,包括了linux中目录与路径常见相关命令的使用技巧和注意事项,需要的朋友参考一下 linux中目录与路径常用命令 相对路径与绝对路径     绝对路径:路径的学法一定由根目录/写起。如/user/share/doc。     相对路径:目录不由/写起。如/user/share/doc要切换到/user/share/man时可以写为“cd  ../m

  • 在我的Spring Boot配置文件中,我是否可以指定相对于Spring Boot jar的日志文件位置,而不是相对于启动jar的目录? null 开始: 结果: /random/dir/logs/app.log 期望: /app/dir/logs/app.log 附加信息:jar将运行在不同的操作系统上。因此jar路径可能类似于: null 完整解决方案:基于@Satyesht 开始: