django Wagtail {{document.url}}在生产中针对用户上载的文件返回404

6yjfywim  于 2023-02-25  发布在  Go
关注(0)|答案(1)|浏览(80)

我继承了Wagtail CMS项目,但一直无法解决有关文件上传的问题。
通过CMS上传文件后,文件到达documents目录/var/www/example.com/wagtail/media/documents/test_pdf.pdf,该目录Map到Docker容器内的/usr/src/app/media/documents/test_pdf.pdf目录。
在前端(以及Wagtail控制面板内),document. url解析为https://example.com/documents/9/test_pdf.pdf/,返回404。显然,上面的文件路径中缺少型号段,但我读取到on a forum
在Wagtail中,文档总是通过Django视图(wagtail.wagtaildocs.views. serve. serve)提供,这样我们就可以对文档下载执行额外的处理
因此,这本身也许不是一个问题。
urls.py文件中有几行看起来是正确的:

urlpatterns = [
    url(r'^django-admin/', admin.site.urls),

    url(r'^admin/', include(wagtailadmin_urls)),
    url(r'^documents/', include(wagtaildocs_urls)),

    url(r'^search/$', search_views.search, name='search'),
    url(r'^sitemap\.xml$', sitemap),

    url(r'', include(wagtail_urls)),

    #    url(r'^pages/', include(wagtail_urls)),
]

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

base.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/

所以,我的直觉是:
1.上传内容存储不正确,存储在单个文件夹中,而不是按型号存储在子目录中
1.到这个"虚拟"目录的路由被破坏了,所以它在"检查权限"阶段就被破坏了(但是我不知道路由在Django中是如何工作的),并返回404

  1. Web服务器配置不正确,所以虽然"虚拟" URL是好的,但实际上是文件URL坏了,这导致了404(我的nginx包含一个/media/location,但没有/documents/location,正如我所期望的)
    1.完全是另一回事(我的下一步是将副本拉到我自己的机器上,看看问题是否仍然发生)
    我很感激这里没有太多要做的,但是我希望有人能给我一些建议,告诉我还应该检查什么,因为我已经用头撞了一天的大部分时间。
    我的背景是Ruby on Rails,所以,就像那个框架一样,我有一种感觉,在幕后发生了很多"魔法",这使得弄清楚发生了什么非常棘手。
    谢谢!
f87krz0w

f87krz0w1#

您可以在开发时查看文档,因为

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

static文件一样,media文件应在服务器级别处理。例如,如果您使用GCP,则需要更新app.yaml,并以与static/相同的方式添加media/

...

handlers:
  - url: /static
    static_dir: static/
  - url: /media
    static_dir: media/

...

相关问题