Django ImageField上载到与url属性报告的路径不同的路径?

2024-10-02 08:23:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想允许用户上传个人资料图片,然后显示它们

这是我的型号.py

from django.db.models import CharField, ImageField, Model

class Eater(Model):
    name  = CharField(max_length = 30)
    image = ImageField(upload_to = 'images/eaters/')

    def __str__(self):
        return str(self.name)

这是我的URL.py

from django.conf             import settings  # settings is an object, not a module, so you can't import from it. :(
from django.conf.urls.static import static
from django.urls             import path
from .views                  import EaterView, IndexView, post, sudo

app_name    = 'socialfeedia'
urlpatterns = [
    path('',      IndexView.as_view(), name = 'index')
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)  # Static returns a list of path, not a path itself.

这是我的设置的末尾。py

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR.joinpath('media/')

下面是我的index.html中的一行:

<img class="post-profile-picture" src="{{ post.eater.image.url }}" alt="?"/>

我已成功将文件上载到此字段-它存储在:

mysite/media/images/eaters/test_picture_64.jpg

如果我在此处访问,图像将成功加载:

http://127.0.0.1:8000/socialfeedia/media/images/eaters/test_picture_64.jpg

但是,在我生成的文件中显示的img是:

<img class="post-profile-picture" src="/media/images/eaters/test_picture_64.jpg" alt="?">

这个文件没有解析-我只看到一个?(the alt)。我应该使用其他方法来获取文件的正确路径吗?也许是这样的

{% media post.eater.name %}

(据我所知,除了不存在media这样的东西之外……)

它应该在url的开头包含socialfeedia/(应用程序名称),但它不是。。。到目前为止,我对Django的了解似乎不太像我期望我手动硬编码的那样


Tags: 文件pathdjangonamefrompyimportsettings
2条回答

我猜是要搬家了

+ static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)  # Static returns a list of path, not a path itself.

从应用程序的urls.py文件socialfeedia到项目包下的全局urls.py文件,不要忘记在相应的URL中设置命名空间socialfeedia

from django.conf import settings
from django.urls import path, include

from django.contrib import admin

[..]

urlpatterns = [

    [..]

    path('socialfeedia/', include('socialfeedia.urls', namespace='socialfeedia')),  # HERE

    path('admin/', admin.site.urls),  # Admin Area
]


# DEBUG = True
if settings.DEBUG:

    from django.conf.urls.static import static

    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

如果这对你有帮助,请告诉我

src的开头添加{% get_media_prefix %}对我来说很有效,但我很确定这不是正确的解决方案

<img class="post-profile-picture" src="{% get_media_prefix %}{{ post.eater.image.url }}" alt="?"/>

相关问题 更多 >

    热门问题