我想允许用户上传个人资料图片,然后显示它们
这是我的型号.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的了解似乎不太像我期望我手动硬编码的那样
我猜是要搬家了
从应用程序的
urls.py
文件socialfeedia
到项目包下的全局urls.py
文件,不要忘记在相应的URL中设置命名空间socialfeedia
:如果这对你有帮助,请告诉我
在
src
的开头添加{% get_media_prefix %}
对我来说很有效,但我很确定这不是正确的解决方案相关问题 更多 >
编程相关推荐