Как переписать или добавить слова в URL Django?

Когда я перехожу на страницу подробного описания товара, я получаю http://xxx.x.x.x:x000/product/PN/

Я хочу изменить URL с PN на название продукта. Таким образом, мой URL должен выглядеть следующим образом, если все работает правильно http://xxx.x.x.x:x000/product/name/:

model.py

class Product():
    name = models.CharField(max_length=400, db_index=True)
    PN = models.CharField(max_length=100, default=random_string)

view.py

def product_detail(request, PN):
    product = get_object_or_404(Product, PN=PN)
    return render(request, 'productdetail.html',
                  {'product': product})

url.py

urlpatterns = [
    url(r"^", include("users.urls")),
    path('product/<str:PN>/', productdetail, name='productdetail')
    ]

Я уже пробовал: изменить urls.py

urlpatterns = [
  url(r"^", include("users.urls")),
  path('product/<str:name>/', productdetail, name='productdetail')
        ]

тогда я изменил def productdetail(request, name): get_object_or_404(Product, name=name)

но я получил следующую ошибку.

Page not found (404)
Request Method: GET
Request URL:    http://xxx.x.x.x:x000/product/PN/
Raised by:  shop.views.productdetail
No Product matches the given query.

Вы видите эту ошибку, потому что в вашем файле настроек Django установлено DEBUG = True. Измените это значение на False, и Django отобразит стандартную страницу 404.

Вернуться на верх