通过django管理员上传的图像未找到,虽然URL似乎正确

8tntrjer  于 2023-05-19  发布在  Go
关注(0)|答案(2)|浏览(127)

作为Django纽比,我正在努力在屏幕上获得图像。在阅读了大量的问题和问题的答案后,我只是更加困惑,因为它看起来像我编码的必要性,但我得到一个404错误时,点击一个图片链接在管理页面或试图显示一个图像在模板。虽然这两个似乎是相关的,我会坚持管理网站。
这是我在管理员网站上看到的:

从我所看到/读到的来看,这是正确的。
但是当我点击链接时,我得到一个404错误:

尽管媒体URL似乎可以工作,因为images/Presentation_...jpg现在以http://.../media/为前缀
图像位于以下目录中:

其中C:\Users\Admin\PycharmProjects\website_andalucia是我的BASE_DIR(当我从www.example.com打印settings.py)
necessary代码看起来像这样:
My_project/catalog/settings.py

DEBUG = True
...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# Base url to serve media files
MEDIA_URL = '/media/'
# Path where media is stored
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
print("base dir:", BASE_DIR)
print("media root:", MEDIA_ROOT)

My_project/my_project/models.py(参见remark_image)

class remark(models.Model):
    # Fields
    activity = models.ForeignKey(activity, on_delete=models.CASCADE, null=True)
    remark_date = models.DateField(default=date.today)
    remark_desc = models.TextField(help_text='Enter your remark(s) here')
    remark_image = models.ImageField(upload_to='images/', null=True, blank=True)
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)

My_project/catalog/urls.py

urlpatterns = [
path('', views.index, name='index'),
path('activities/', views.activitiesView.as_view(), name='activities'),
path('activity/<int:pk>', views.activityDetailView.as_view(), name='activity-detail'),
path('my_activities/', views.userActivitiesView.as_view(), name='my_activities'),
path('add_activity/', views.add_activity, name='add_activity'),
path('activity/<int:pk>/add_remark/', views.add_remark, name='add_remark'),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

My_project/my_project/urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('', RedirectView.as_view(url='catalog/', permanent=True)),
path('catalog/', include('catalog.urls')),
path('accounts/', include('django.contrib.auth.urls')),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

为什么我得到的是404错误信息而不是图片?
PS我在Windows 10上,使用PyCharm,Python 3.11.0和Django 4.1.5的venv

x7yiwoj4

x7yiwoj41#

您需要将所有辅助www.example.com文件中的所有urlpatterns包含urls.py到主项目urls.py文件中的最终主urlpatterns集中。
文档示例:

urlpatterns = [
    path("index/", views.index, name="main-view"),
    path("bio/<username>/", views.bio, name="bio"),
    path("articles/<slug:title>/", views.article, name="article-detail"),
    path("articles/<slug:title>/<int:section>/", views.section, name="article-section"),
    path("blog/", include("blog.urls")), ### <<<--- here /blog/urls.py is included
    ...,
]

如果是my_project/app/urls.py,则为my_project/urls.py中的path("", include("app.urls"))
人民民主联盟
这包括
path('catalog/', include('catalog.urls')),
这意味着所有来自catalog/urls.py的URL都应该以catalog/为前缀。这就是为什么Django无法将/media/...Map到任何url模式的原因--没有注册这样的url模式,只有/catalog/media/... url模式。
我猜其余的catalog应用程序url应该在/catalog/ URL下,但是 media 文件和media files url模式是全局性的,对整个项目来说是通用的,因此最好是 * 移动 *(而不是复制)media url模式到定义静态文件url模式的地方:
My_project/my_project/urls.py

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
sgtfey8w

sgtfey8w2#

你是不是忘了在html的第一行写上{% load static %}这句话?

相关问题