немного запутался в получении абсолютного URL-адреса в django - PullRequest
0 голосов
/ 07 мая 2020
#project url

from django.conf import settings
from django.conf.urls import url
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include

import products

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('products.urls')),
    url(r'^product/(?P<title>[\w-]+)/$', products.views.single,name='single')



]

# app url
from django.urls import path, include

import products
from . import views

urlpatterns = [
    path('', views.home, name='home'),

]
 #model
class products(models.Model):
    title = models.CharField(max_length=120)
    desc = models.TextField()
    price = models.DecimalField(max_digits=10, decimal_places=2, default=29.99)
    sales_price = models.DecimalField(max_digits=10, decimal_places=2, blank=False, null=False, default=0)
    slug = models.SlugField(unique=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    update = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)

    def __str__(self):
        return self.title

    def get_price(self):
        return self.price

    def get_absolute_url(self):
        return reverse("single", kwargs={"title": self.title})
#views
def home(request):
    product = products.objects.all()
    template = 'home.html'

    context = {'product': product}

    return render(request, template, context)

def single(request,title):
    try:
        product = products.objects.get(title=title)
        template = 'products.html'
        context = {'product': product}
        return render(request, template, context)
    except:
        raise Http404

пожалуйста, просмотрите мой код .. im littlebit запутался в абсолютном URL-адресе .. он возвращает название продукта после нажатия какой-либо ссылки, но он не дает мне заголовок, если я изменяю produ c на другой. например: http: /127.0.0.1: 8000 / product / T-shirt / дает название, но когда я нажимаю http: /127.0.0.1: 8000 / productS / T-shirt, выдает ошибку

1 Ответ

0 голосов
/ 07 мая 2020

Трудно сказать, в чем ваша настоящая проблема, исходя из того, как вы выразили свой вопрос, но есть несколько проблем: называться в единственном числе. Кроме того, следуя практике Python, они должны быть написаны с заглавной буквы.

  • class products(...) должно быть class Product(...).
Поскольку title не является уникальным полем, как только у вас будет несколько товаров с именем «Футболка» , ваше представление single будет сканировать sh, поскольку .get() отказывается работать, если запросу соответствует более одного объекта.
  • Переосмыслите схему URL-адресов (например, используйте это уникальное поле slug, которое у вас есть).
URL-адрес product/.../ должен быть в products/urls.py, а не в вашем URL-адреса проектов.
  • Переместите его туда.
Если вы не совсем уверены, что делаете, не используйте пустой except:, так как он с радостью скроет любое исключение. Вероятно, вы ищете except ObjectDoesNotExist:. Вам следует рассмотреть возможность использования общих c представлений на основе классов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...