DJANGO:URL 网页和媒体文件混合问题

DJANGO : Problem of mixing between URL of web pages and media files

我正在开发一个网站,有时我会遇到一个奇怪的问题:页面的 URL 与该页面上的图像 URL 连接在一起,这意味着我无法访问这些图像。有点难以解释,所以这里有一个例子:

我有一个名为 "mes_plats" 的视图,它显示有关炊具烹制的饭菜的一些信息。信息显示时背景位于 static/media/img_background.jpg,一切正常。我有另一个名为 "supprimer_plat" (url : supprimer-plat) 的视图,其目的是删除有关特定餐点的信息。此视图呈现与另一个相同的 html 模板,但这次模板尝试访问以下 url 作为背景:supprimer-plat/static/media/img_background.jpg。显然没有显示背景。 所以我的问题是,为什么在一种情况下页面的 url 连接到图像的 URL 而在另一种情况下却没有?我该如何解决?提前致谢!

views.py

def mes_plats(request):
    return render(request, 'actualites/mes_plats.html', {'my_meals': Plat.objects.filter(chef=request.user.useradvanced.chef, date_prep__gte = date.today())})

def supprimer_plat(request, id):
    plat = get_object_or_404(Plat, id=id)
    plat.delete()
    return render(request, 'actualites/mes_plats.html', {'my_meals': Plat.objects.filter(chef=request.user.useradvanced.chef, date_prep__gte = date.today())})

urls.py

urlpatterns = [
    path('mes-plats', views.mes_plats, name = 'mes-plats'),
    path('supprimer-plat/<int:id>', views.supprimer_plat, name = 'supprimer-plat'),
]

mes_plats.html

<!doctype html>
{% extends "base.html" %}
{% load static %}
{% block content %}
   <body class="view" style="background-image: url('static/media/img_background.jpg'); background-repeat: no-repeat; background-size: cover; background-position: center center;">
      SOME CODE
{% endblock %}

这是预期的行为。您的 url 是:

static/media/img_background.jpg

使用相对路径。因此,如果站点位于 foo.com/bar/qux,则它将浏览 foo.com/bar/static/media/img_background.jpg

因此,您可以通过在路径前加上斜杠来避免这种情况,例如:

<b>/</b>static/media/img_background.jpg

但在这里使用 Django 的 staticfiles support [Django-doc]. After configuring this, you can use the <b>{% static … %}</b> template tag [Django-doc] 到 "calculate" 的 url 可能会更好。

请注意,在部署模式下,您需要将服务器配置为服务 静态文件本身。但是您仍然可以使用 {% static … %} 来计算 URL,从而减少出错的可能性。