为什么我看不到图片?
Why can't I see the image?
项目名称:我的页面
应用名称:hoge
数据库:sqlite3
嗯嗯,我可以上传图片了。
'mypage/media/uploads'
(models.py)
class Staff(models.Model):
"""shop staff"""
name = models.CharField('display_name', max_length=50)
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
store = models.ForeignKey(Store, verbose_name='shop', on_delete=models.CASCADE)
# it mean localhost/media/uploads/
image = models.ImageField(upload_to='uploads/', null=True, blank=True)
class Meta:
constraints = [
models.UniqueConstraint(fields=['user', 'store'], name='unique_staff'),
]
def __str__(self):
return f'{self.store.name} - {self.name}'
(settings.py)
:
STATIC_URL = '/static/'
MEDIA_ROOT = BASE_DIR / 'media/'
MEDIA_URL = '/media/'
(urls.py)
from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static
app_name = 'booking'
urlpatterns = [
path('', views.StoreList.as_view(), name='store_list'),
path('store/<int:pk>/staffs/', views.StaffList.as_view(), name='staff_list'),
path('staff/<int:pk>/calendar/', views.StaffCalendar.as_view(), name='calendar'),
path('staff/<int:pk>/calendar/<int:year>/<int:month>/<int:day>/', views.StaffCalendar.as_view(), name='calendar'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我可以上传。
我可以注册到sqlite3
我尝试加载图片。
(calendar.html)
{% extends 'hoge/base.html' %}
{% block content %}
<h1>{{ staff.store.name }}店 {{ staff.name }}</h1>
<img src="{{ staff.image.url }}" alt="missing image">
:
(console)
mypage> python manage.py runserver
[12/Feb/2022 19:20:49] "GET /booking/staff/1/calendar/ HTTP/1.1" 200 13998
Not Found: /media/uploads/photo.png
[12/Feb/2022 19:20:49] "GET /media/uploads/photo.png HTTP/1.1" 404 2254
我可以显示日历页面但没有图片
路径似乎匹配。
实际图片在“http://127.0.0.1:8000/booking/media/uploads/photo.png”
不需要“/booking”
我的认知差距是什么?我的头很累...
来源是 on github.
问题出在URLs配置中,删除这行代码
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
来自 hoge.urls 并将其放入配置 URLs
在您的原始设置中,您已将 hoge
应用程序 URL 包含在 booking/
端点下,这就是为什么您的图片 URL 附加在预订/ .
像这样更新 URL。
#config.urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('booking/', include('hoge.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
和
#hoge.urls.py
from django.urls import path
from . import views
app_name = 'booking'
urlpatterns = [
path('', views.StoreList.as_view(), name='store_list'),
path('store/<int:pk>/staffs/', views.StaffList.as_view(), name='staff_list'),
path('staff/<int:pk>/calendar/', views.StaffCalendar.as_view(), name='calendar'),
path('staff/<int:pk>/calendar/<int:year>/<int:month>/<int:day>/', views.StaffCalendar.as_view(), name='calendar'),
]
这将解决 URL 正确加载图像的问题。
项目名称:我的页面
应用名称:hoge
数据库:sqlite3
嗯嗯,我可以上传图片了。
'mypage/media/uploads'
(models.py)
class Staff(models.Model):
"""shop staff"""
name = models.CharField('display_name', max_length=50)
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
store = models.ForeignKey(Store, verbose_name='shop', on_delete=models.CASCADE)
# it mean localhost/media/uploads/
image = models.ImageField(upload_to='uploads/', null=True, blank=True)
class Meta:
constraints = [
models.UniqueConstraint(fields=['user', 'store'], name='unique_staff'),
]
def __str__(self):
return f'{self.store.name} - {self.name}'
(settings.py)
:
STATIC_URL = '/static/'
MEDIA_ROOT = BASE_DIR / 'media/'
MEDIA_URL = '/media/'
(urls.py)
from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static
app_name = 'booking'
urlpatterns = [
path('', views.StoreList.as_view(), name='store_list'),
path('store/<int:pk>/staffs/', views.StaffList.as_view(), name='staff_list'),
path('staff/<int:pk>/calendar/', views.StaffCalendar.as_view(), name='calendar'),
path('staff/<int:pk>/calendar/<int:year>/<int:month>/<int:day>/', views.StaffCalendar.as_view(), name='calendar'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我可以上传。
我可以注册到sqlite3
我尝试加载图片。
(calendar.html)
{% extends 'hoge/base.html' %}
{% block content %}
<h1>{{ staff.store.name }}店 {{ staff.name }}</h1>
<img src="{{ staff.image.url }}" alt="missing image">
:
(console)
mypage> python manage.py runserver
[12/Feb/2022 19:20:49] "GET /booking/staff/1/calendar/ HTTP/1.1" 200 13998
Not Found: /media/uploads/photo.png
[12/Feb/2022 19:20:49] "GET /media/uploads/photo.png HTTP/1.1" 404 2254
我可以显示日历页面但没有图片
路径似乎匹配。
实际图片在“http://127.0.0.1:8000/booking/media/uploads/photo.png”
不需要“/booking”
我的认知差距是什么?我的头很累...
来源是 on github.
问题出在URLs配置中,删除这行代码
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
来自 hoge.urls 并将其放入配置 URLs
在您的原始设置中,您已将 hoge
应用程序 URL 包含在 booking/
端点下,这就是为什么您的图片 URL 附加在预订/ .
像这样更新 URL。
#config.urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('booking/', include('hoge.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
和
#hoge.urls.py
from django.urls import path
from . import views
app_name = 'booking'
urlpatterns = [
path('', views.StoreList.as_view(), name='store_list'),
path('store/<int:pk>/staffs/', views.StaffList.as_view(), name='staff_list'),
path('staff/<int:pk>/calendar/', views.StaffCalendar.as_view(), name='calendar'),
path('staff/<int:pk>/calendar/<int:year>/<int:month>/<int:day>/', views.StaffCalendar.as_view(), name='calendar'),
]
这将解决 URL 正确加载图像的问题。