如何更改模板,以便动态url在Django中起作用?

时间:2019-03-18 20:30:30

标签: python django

我正在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/的内容,它就会为我显示此错误页面: enter image description here

我希望图像清晰可见。 我看到了该错误,并根据解决方案将products.html文件的结构更改为此

<!DOCTYPE html>
<html lang="en">
<body>
    <h1>Products Page</h1>
    {{ object.title }}
    {{ object.description }}
    {{ object.price }}
</body>

</html>

然后我看到它按预期工作得很好!这意味着urls.pyviews.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

enter image description here

2 个答案:

答案 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'),