【问题标题】:FilePathField for Image Path not working with Django Admin Panel图像路径的 FilePathField 不适用于 Django 管理面板
【发布时间】:2021-12-31 17:14:04
【问题描述】:

对于 Django 和一般的 Web 开发来说是新手。但我关注了tutorial 来创建我的第一个站点。一切正常,直到我完成并想使用 Django 管理面板编辑信息。

主要问题是我有一个如下所示的模型,它使用 FilePathField 来描述图像位置。教程让我把图片放在/home/pi/mysite/projects/static/img。

from django.db import models

class Project(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    technology = models.CharField(max_length=20)
    image = models.FilePathField('/img')
    def __str__(self):
        return self.title #or self.title for blog posts

起初这在网站上显示图像时效果很好,但是一旦我尝试从管理面板导航到/change/ url,我会得到FileNotFoundError at /admin/projects/project/1/change/ [Errno 2] No such file or directory: '/img'

于是我环顾四周,发现 FilePathField 是一个绝对路径,所以尝试用/home/pi/mysite/projects/static/img/ 绝对定义它。这阻止了错误的发生,这让我至少可以从管理面板访问/change/ url。面板现在显示带有下拉菜单的图像字段,我可以使用它在上面的不同图像之间进行选择,这些图像位于 /home/pi/mysite/projects/static/img/。但是在管理面板中,一旦我点击保存,图像将不再显示在网站上。在网站上使用检查元素后,它似乎试图从/static/projects/static/img 中提取图像。然后我尝试将图像移动到/static/projects/static/img,但随后它们不再显示在管理面板的下拉框中,也没有显示在网站上。

所以此时我有点困惑,我应该在哪里指向 FilePathField,这将允许我在网站上显示图像并通过管理面板更改它们。

【问题讨论】:

    标签: python django static django-admin


    【解决方案1】:

    更好的方法是像这样使用 django 的 FileField:

    image = models.FileField(null=True, blank=True)
    

    在您的settings.py 中,您需要包含媒体路径。检查你的设置中是否有这个。

    MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
    MEDIA_URL = '/media/'
    

    最后一步是在你的 urls.py 中扩展 urlpatterns:

    urlpatterns = [
        # your paths
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    这将生成一个/media/ 目录,您上传的媒体文件将指向该目录。然后在您的前端,您可以简单地使用模型属性image.url 来获取图像的绝对网址。

    【讨论】:

    • 谢谢!这在管理面板上似乎要容易得多。我现在可以通过转到/media/project1.png 直接从浏览器访问图片,但是它们仍然没有显示在网站上的正确页面上。检查图像时,他们仍在尝试从/static/project1.png 加载。对于页面模板,我有这个来显示图像<img class="card-img-top" src="{% static project.image %}">。仍然不完全确定一切是如何工作的,但试图将静态更改为其中的媒体,但没有改变。那么从那个 中我还应该放什么东西吗?
    • 想通了,把它改成src={{ project.image.url }} 并修复了它。
    猜你喜欢
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多