1

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

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

视图.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())})

网址.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 %}
4

1 回答 1

1

这是预期的行为。你的网址是:

static/media/img_background.jpg

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

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

/static/media/img_background.jpg

但是这里最好利用 Django 的staticfiles支持 [Django-doc]。配置后,您可以使用{% static … %}模板标签 [Django-doc]来“计算”url。

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

于 2019-12-28T12:24:58.910 回答