作为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
2条答案
按热度按时间x7yiwoj41#
您需要将所有辅助www.example.com文件中的所有urlpatterns包含urls.py到主项目
urls.py
文件中的最终主urlpatterns
集中。文档示例:
如果是
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
sgtfey8w2#
你是不是忘了在html的第一行写上
{% load static %}
这句话?