Skip to content

5. Order

Dmitry edited this page Dec 11, 2018 · 1 revision

Order page

URL

path('shop/', include('shop.urls')),

#shop/urls.py

from django.urls import path, include
from .views import detail

urlpatterns = [
    path('detail/<int:pk>', detail, name="detail")
]

View

def detail(request,pk):
    pizza = Pizza.objects.get(pk=pk)
    return render(request,'shop/detail.html',{'pizza': pizza})

404

from django.shortcuts import get_object_or_404
get_object_or_404(queryset, pk=1)

Template (templates/shop/detail.html)

{% extends 'layout.html' %}
{% load widget_tweaks %}
{% load thumbnail %}

{% block content %}
    <h1>Detail information</h1>
    <div class="row">
        
        <div class="col-md-8">
          <h2>Detail</h2>
            <div class="row">
           
        </div>

        </div>
        <div class="col-md-4">
            <h2>Order.</h2>                        
        </div>
    </div>
{% endblock %}

{% block footer %}
    <h3>This is footer</h3>
{% endblock %}

Slugify

pip install python_slugify==1.2.4

# model

from slugify import slugify


name_slug = models.CharField(max_length=150, default='')


def save(self, *args, **kwargs):
    self.name_slug = slugify(self.name)
    super(Pizza, self).save(*args, **kwargs)



def get_absolute_url(self):
    from django.urls import reverse
    return reverse('detail', kwargs={'slug': self.name_slug})

Url

path('detail/<str:slug>', detail, name="detail")

Template

<a href="{{p.get_absolute_url}}">

404

    try:
    pizza = Pizza.objects.get(name_slug=slug)
except:
    raise Http404('Не смог найти пицку %s' % slug)    

Button

<a href="{% url 'make_order' id=pizza.id %}" class="btn btn-primary btn-lg">Order</a>   

URL

path('make_order/<int:pk>', make_order, name="make_order")

VIEW

def make_order(request,pk):
    pizza = get_object_or_404(Pizza,pk=pk)
    orders = Order.objects.all()
    pizza.make_order(request)
    return render(request,'shop/order_list.html',{'pizza': pizza, 'orders': orders})

Model

def make_order(self,request):
    print('Making order!!!')    
    from shop.models import Order
    o = Order.objects.create(
        pizza = self
    )

Clone this wiki locally