我正在Django中创建一个动态URL。这些是我遵循的步骤:
urls.py
path('products/<int:my_id>/', views.products, name='products'),
接下来,在views.py
中,我添加了以下定义的产品视图
def products(request, my_id, *args):
obj = Product.objects.get(id=my_id)
custom_context = {
'title': 'products',
'object': obj
}
return render(request, 'products.html', custom_context)
然后创建了与其关联的products.html
文件
{% extends 'base.html' %}
{% block content %}
<h1>Products Page</h1>
{{ object.title }}
{{ object.description }}
{{ object.price }}
{% endblock content%}
一旦我在地址栏中输入类似localhost:8000/products/1/
的内容,它就会为我显示此错误页面:
我希望图像清晰可见。
我看到了该错误,并根据解决方案将products.html
文件的结构更改为此
<!DOCTYPE html>
<html lang="en">
<body>
<h1>Products Page</h1>
{{ object.title }}
{{ object.description }}
{{ object.price }}
</body>
</html>
然后我看到它按预期工作得很好!这意味着urls.py
,views.py
中没有问题,只有我的.html
模板中才有问题。你能告诉我是什么问题吗?
非常感谢
编辑: base.html
<nav>
<div class="logo">
<span>LOGO</span>
</div>
<ul class="nav-links" id="sidenav">
<li><a href="{% url 'home' %}">Home</a></li>
<li><a href="{% url 'products' %}">Products</a></li>
<li><a href="{% url 'services' %}">Services</a></li>
<li><a href="{% url 'portfolio' %}">Portfolio</a></li>
<li><a href="{% url 'about' %}">About</a></li>
<li><a href="{% url 'contact_us' %}">Contact us</a></li>
<li><a href="{% url 'form' %}">Form</a></li>
</ul>
<div class="burgers">
<div class="line1"></div>
<div class="line2"></div>
<div class="line3"></div>
</div>
</nav>
编辑:@sigdev
答案 0 :(得分:0)
如果这表示产品详细信息页面的网址:
path('products/<int:my_id>/', views.product_detail, name='product_detail'),
您应为产品列表添加网址:
path('products/', views.product_list, name='product_list'),
然后修复产品视图以更好地理解并命名为 product_detail 视图:
def product_detail(request, my_id, *args):
obj = Product.objects.get(id=my_id)
custom_context = {
'title': 'product_detail',
'object': obj
}
return render(request, 'product_detail.html', custom_context)
必须创建如下的 product_list 视图后:
def product_list(request, *args):
object_list = Product.objects.all()
custom_context = {
'title': 'product_list',
'object_list': object_list
}
return render(request, 'product_list.html', custom_context)
对于模板中的网址,您必须这样称呼它们:
<a href="{% url 'product_list' %}">Product List</a>
<a href="{% url 'product_detail' my_id=object.id %}">Product Details for product {{ object.id }} </a>
答案 1 :(得分:0)
您需要有两个单独的url和视图,一个用于常规产品列表页面(用于所有产品),另一个用于特定产品页面。
path('products/', views.products, name='products'),
path('product/(?P<id>\d+)/', views.product, name='product'),