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,从而减少出错的可能性。
我正在开发一个网站,有时我会遇到一个奇怪的问题:页面的 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,从而减少出错的可能性。