这里有一个问题,我的页面上有产品,每个产品都有自己的slug。该slug重定向到产品的个人页面,其中显示有关产品的所有必要信息(名称、描述、图像等)。但由于某种原因,该页面只是空的,即 html 文件中写入的内容没有显示,我不明白为什么。重定向没有错误,产品 slug 出现在 url 中,但没有产品信息。
P.s 在视图中,我使用 print 在终端中查看是否确实转到产品页面并获取产品名称。是的,我确实在终端中得到了它
views.py
def product_detail(request, post):
product = get_object_or_404(ProductModel, slug=post)
print(product.title)
return render(request, 'products/detail-products.html', {
'product': product,
})
url.py
from django.urls import path
from products import views
app_name = 'products'
urlpatterns = [
path('', views.products, name='products'),
path('product/<slug:post>/', views.product_detail, name='product_detail'),
]
product.html - 这里有一个按钮可以重定向到个人信息页面。
<div class="button__more">
<a href="{% url 'products:product_detail' product.slug %}"><button>Подробнее</button></a>
</div>
产品详细信息.html
{% extends 'main/base.html' %}
{% block title %}Detail {{ product.title }}{% endblock title %}
{% block content %}
<style>
.product__detail__photo img {
width: 60%;
height: auto;
background-size: cover;
object-fit: cover;
border-radius: 5px;
}
</style>
<div class="product__detail">
<div class="product__image">
{% if product.product_images %}
<img src="{{ product.product_images.url }}" alt="product image">
{% else %}
<p>No image available</p>
{% endif %}
</div>
<div class="photo__detail__info">
<div class="photo__detail__info__title">
<h1>{{ product.title }}</h1>
</div>
<div class="photo__detail__info__description">
<h1>{{ product.full_description }}</h1>
</div>
</div>
</div>
{% endblock content %}
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock title %}</title>
</head>
<body>
{% block content %}
{% endblock content %}
</body>
</html>
我尝试过重写视图并使用不同的方式通过 slg 进行重定向,我尝试过通过 id 进行重定向,即使我不需要它。如果您打开产品的个人页面并且所有内容都输出正常,我什至可以将产品名称输出到控制台,但页面本身没有任何内容应该包含在 html 文件中。
我希望当您转到产品的详细页面时,我会显示 html 文件中记录的有关该产品的所有必要信息,但由于某种原因,这种情况没有发生,我不明白为什么会这样。终端没有错误。
您似乎将“product”上下文变量传递给detail-products.html 模板而不是product-detail.html。尝试解决这个问题。如果它不起作用,请尝试将另一个上下文变量传递给渲染函数,例如 'test': 'Test message',以检查模板是否正确填充了测试数据。