问题描述
这是我的 model.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)
这是我的 urls.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.
这是我 settings.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 class="post-profile-picture" src="/media/images/eaters/test_picture_64.jpg" alt="?">
此文件无法解析-我只是看到一个?
(alt
)。我是否应该使用其他方法来获取文件的正确路径?也许是这样的东西?
{% media post.eater.name %}
(据我所知,不存在media
这样的东西...)
它应该在URL的开头包含socialFeedia/
(应用程序名称),但不是...这似乎与我到目前为止对Django的期望不太相似我手动将其硬编码为...
解决方法
我的猜测是要移动
+ static(settings.MEDIA_URL,document_root = settings.MEDIA_ROOT) # Static returns a list of path,not a path itself.
从应用程序urls.py
的{{1}}文件到项目包下的全局socialfeedia
文件,不要忘记设置命名空间 {{1 }}中的相应网址:
urls.py
让我知道这是否对您有帮助。
,在{% get_media_prefix %}
开头添加src
对我来说是可行的,但我敢肯定这不是正确的解决方案。
<img class="post-profile-picture" src="{% get_media_prefix %}{{ post.eater.image.url }}" alt="?"/>