Django html 页面不显示我在视图中传递的变量
Django html page does not display a variable i passed in views
我是 Django 的初学者,我遇到了一个问题。我写了一段代码,允许我从管理员添加不同的产品和类别,然后将它们显示在 html 页面上。但是,当我单击任何显示的产品时,我希望我的产品说明显示在另一个 html 页面中。第一页工作正常(product_list.html),但是我在第二页上遇到了问题(product_detail.html)。
urls.py(没有导入):
urlpatterns = [
url(r'^category/(?P<categoryid>\d+)/$', views.product_list, name='product_list_by_category'),
#url(r'^list/(?P<id>\d+)/$', views.product_detail, name='product_detail'),
re_path('^$', views.product_list, name = 'product_list'),
url(r'^list/(?P<id>\d+)/$', views.product_detail, name='product_detail'),
]
views.py
def product_list(request, categoryid = 1): *this one is working*
categories = Category.objects.all()
products = Product.objects.all().filter(category_id=categoryid)
context = {'categories': categories,
'products': products
}
return render(request, 'shop/product_list.html', context)
def product_detail(request, id=1): *this one is not displaying anything*
productt = Product.objects.all().filter(id = id)
return render(request, 'shop/product_detail.html', {'product': productt})
product_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="http://localhost:8000/shop/list/{{product.id}}/">{{product.description}}</a>
</body>
</html>
你知道为什么 product_detail 渲染的页面不显示任何东西吗?
filter
returns 一个查询集。查询集没有 id
或 description
属性。
您需要使用get
获取实例:
productt = Product.objects.get(id=id)
@DanielRoseman 是对的,但为了防止在没有具有该 ID 的产品时出现错误,您有 3 个选项。第一个是做一个queryset,得到第一个元素,然后检查是否有结果,像这样:
productt = Product.objects.filter(id=id).first()
if productt is None:
# do something to let the user know the product doesn't exist
第二个选项是将您的 get
方法包装在 try except
:
周围
try:
productt = Product.objects.get(id=id)
except Product.DoesNotExist:
# do something to let the user know the product doesn't exist
最后的选择是使用get_object_or_404,即:
Calls get() on a given model manager, but it raises Http404 instead of the model’s DoesNotExist exception.
from django.shortcuts import get_object_or_404
productt = get_object_or_404(Product, id=id)
我是 Django 的初学者,我遇到了一个问题。我写了一段代码,允许我从管理员添加不同的产品和类别,然后将它们显示在 html 页面上。但是,当我单击任何显示的产品时,我希望我的产品说明显示在另一个 html 页面中。第一页工作正常(product_list.html),但是我在第二页上遇到了问题(product_detail.html)。
urls.py(没有导入):
urlpatterns = [
url(r'^category/(?P<categoryid>\d+)/$', views.product_list, name='product_list_by_category'),
#url(r'^list/(?P<id>\d+)/$', views.product_detail, name='product_detail'),
re_path('^$', views.product_list, name = 'product_list'),
url(r'^list/(?P<id>\d+)/$', views.product_detail, name='product_detail'),
]
views.py
def product_list(request, categoryid = 1): *this one is working*
categories = Category.objects.all()
products = Product.objects.all().filter(category_id=categoryid)
context = {'categories': categories,
'products': products
}
return render(request, 'shop/product_list.html', context)
def product_detail(request, id=1): *this one is not displaying anything*
productt = Product.objects.all().filter(id = id)
return render(request, 'shop/product_detail.html', {'product': productt})
product_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="http://localhost:8000/shop/list/{{product.id}}/">{{product.description}}</a>
</body>
</html>
你知道为什么 product_detail 渲染的页面不显示任何东西吗?
filter
returns 一个查询集。查询集没有 id
或 description
属性。
您需要使用get
获取实例:
productt = Product.objects.get(id=id)
@DanielRoseman 是对的,但为了防止在没有具有该 ID 的产品时出现错误,您有 3 个选项。第一个是做一个queryset,得到第一个元素,然后检查是否有结果,像这样:
productt = Product.objects.filter(id=id).first()
if productt is None:
# do something to let the user know the product doesn't exist
第二个选项是将您的 get
方法包装在 try except
:
try:
productt = Product.objects.get(id=id)
except Product.DoesNotExist:
# do something to let the user know the product doesn't exist
最后的选择是使用get_object_or_404,即:
Calls get() on a given model manager, but it raises Http404 instead of the model’s DoesNotExist exception.
from django.shortcuts import get_object_or_404
productt = get_object_or_404(Product, id=id)