Py学习  »  Django

Django:网页URL与媒体文件混合的问题

Julien Mertz • 4 年前 • 1157 次点击  

我正在开发一个网站,有时我会遇到一个奇怪的问题:页面的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一致,而不是在另一种情况下?我该怎么解决呢?提前谢谢!

视图.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 %}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52022
 
1157 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Willem Van Onsem
Reply   •   1 楼
Willem Van Onsem    4 年前

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

static/media/img_background.jpg

使用 相对的 路径。所以如果地点在 foo.com/bar/qux ,然后它将浏览 foo.com/bar/static/media/img_background.jpg .

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

/static/media/img_background.jpg

但在这里最好利用Django的 staticfiles support [Django-doc] . 配置之后,可以使用 {% static … %} template tag [Django-doc] 计算网址。

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