Как мне изменить мой шаблон, чтобы динамический URL работал в Django? - PullRequest
0 голосов
/ 18 марта 2019

Я делаю динамический URL в Django.Вот шаги, которые я выполнил: сначала в 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.htmlfile

{% 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.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

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

У вас должно быть два отдельных URL-адреса и представления: одно для общей страницы списка товаров (для всех продуктов), а другое для конкретной страницы товара.

path('products/', views.products, name='products'),
path('product/(?P<id>\d+)/', views.product, name='product'),
0 голосов
/ 18 марта 2019

Если это средний URL для детали страницы продукта:

path('products/<int:my_id>/', views.product_detail, name='product_detail'),

Вы должны добавить URL для списка продукта:

path('products/', views.product_list, name='product_list'),

Затем исправьте представление ваших продуктов для лучшего понимания и назовите его product_detail view:

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 view, например:

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)

А для URL-адресов в шаблоне вы должны называть их так:

<a href="{% url 'product_list' %}">Product List</a>
<a href="{% url 'product_detail' my_id=object.id %}">Product Details for product {{ object.id }} </a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...