2016-09-19 6 views
0

Я работаю над проектом картриджа. Я создал пользовательские html-шаблоны для лучшей визуализации, и теперь я хочу отображать все данные, которые поступают через встроенные API-интерфейсы картриджа на мои пользовательские html-страницы. For.ex. У меня есть product.html, на котором я хочу показать все продукты, хранящиеся в db (категория мудрый).Как отобразить вывод API-интерфейса картриджа на пользовательской странице HTML?

На самом деле, я пытался изучить URL,

url("^shop/", include("cartridge.shop.urls")), 

я не получаю, что, на котором API или функции, этот URL бьет.

urls.py файл магазина приложение выглядит так, я проверил это, ни один из этих URL не дозвонились,

from __future__ import unicode_literals 

from django.conf.urls import url 
from mezzanine.conf import settings 

from cartridge.shop import views 


_slash = "/" if settings.APPEND_SLASH else "" 

urlpatterns = [ 
    url("^product/(?P<slug>.*)%s$" % _slash, views.product, 
     name="shop_product"), 
    url("^wishlist%s$" % _slash, views.wishlist,  name="shop_wishlist"), 
    url("^cart%s$" % _slash, views.cart, name="shop_cart"), 
    url("^checkout%s$" % _slash, views.checkout_steps, name="shop_checkout"), 
    url("^checkout/complete%s$" % _slash, views.complete, 
     name="shop_complete"), 
    url("^invoice/(?P<order_id>\d+)%s$" % _slash, views.invoice, 
     name="shop_invoice"), 
    url("^invoice/(?P<order_id>\d+)/resend%s$" % _slash, 
     views.invoice_resend_email, name="shop_invoice_resend"), 
] 

Это вид картриджа для «/ магазина/продукта», «/ магазин/лист желаний 'и „/ магазин/корзина“

from __future__ import unicode_literals 
from future.builtins import int, str 

from json import dumps 

from django.contrib.auth.decorators import login_required 
from django.contrib.messages import info 
from django.core.urlresolvers import reverse 
from django.db.models import Sum 
from django.http import Http404, HttpResponse 
from django.shortcuts import get_object_or_404, redirect 
from django.template import RequestContext 
from django.template.defaultfilters import slugify 
from django.template.loader import get_template 
from django.template.response import TemplateResponse 
from django.utils.translation import ugettext as _ 
from django.views.decorators.cache import never_cache 
from mezzanine.conf import settings 
from mezzanine.utils.importing import import_dotted_path 
from mezzanine.utils.views import set_cookie, paginate 
from mezzanine.utils.urls import next_url 

from cartridge.shop import checkout 
from cartridge.shop.forms import (AddProductForm, CartItemFormSet, 
            DiscountForm, OrderForm) 
from cartridge.shop.models import Product, ProductVariation, Order 
from cartridge.shop.models import DiscountCode 
from cartridge.shop.utils import recalculate_cart, sign 

try: 
    from xhtml2pdf import pisa 
except (ImportError, SyntaxError): 
    pisa = None 
HAS_PDF = pisa is not None 


# Set up checkout handlers. 
handler = lambda s: import_dotted_path(s) if s else lambda *args: None 
billship_handler = handler(settings.SHOP_HANDLER_BILLING_SHIPPING) 
tax_handler = handler(settings.SHOP_HANDLER_TAX) 
payment_handler = handler(settings.SHOP_HANDLER_PAYMENT) 
order_handler = handler(settings.SHOP_HANDLER_ORDER) 


def product(request, slug, template="shop/product.html", 
      form_class=AddProductForm, extra_context=None): 
    """ 
    Display a product - convert the product variations to JSON as well as 
    handling adding the product to either the cart or the wishlist. 
    """ 
    published_products = Product.objects.published(for_user=request.user) 
    product = get_object_or_404(published_products, slug=slug) 
    fields = [f.name for f in ProductVariation.option_fields()] 
    variations = product.variations.all() 
    variations_json = dumps([dict([(f, getattr(v, f)) 
     for f in fields + ["sku", "image_id"]]) for v in variations]) 
    to_cart = (request.method == "POST" and 
       request.POST.get("add_wishlist") is None) 
    initial_data = {} 
    if variations: 
     initial_data = dict([(f, getattr(variations[0], f)) for f in fields]) 
    initial_data["quantity"] = 1 
    add_product_form = form_class(request.POST or None, product=product, 
            initial=initial_data, to_cart=to_cart) 
    if request.method == "POST": 
     if add_product_form.is_valid(): 
      if to_cart: 
       quantity = add_product_form.cleaned_data["quantity"] 
       request.cart.add_item(add_product_form.variation, quantity) 
       recalculate_cart(request) 
       info(request, _("Item added to cart")) 
       return redirect("shop_cart") 
      else: 
       skus = request.wishlist 
       sku = add_product_form.variation.sku 
       if sku not in skus: 
        skus.append(sku) 
       info(request, _("Item added to wishlist")) 
       response = redirect("shop_wishlist") 
       set_cookie(response, "wishlist", ",".join(skus)) 
       return response 
    related = [] 
    if settings.SHOP_USE_RELATED_PRODUCTS: 
     related = product.related_products.published(for_user=request.user) 
    context = { 
     "product": product, 
     "editable_obj": product, 
     "images": product.images.all(), 
     "variations": variations, 
     "variations_json": variations_json, 
     "has_available_variations": any([v.has_price() for v in variations]), 
     "related_products": related, 
     "add_product_form": add_product_form 
    } 
    context.update(extra_context or {}) 
    templates = [u"shop/%s.html" % str(product.slug), template] 
    return TemplateResponse(request, templates, context) 

@never_cache 
def wishlist(request, template="shop/wishlist.html", 
      form_class=AddProductForm, extra_context=None): 
    """ 
    Display the wishlist and handle removing items from the wishlist and 
    adding them to the cart. 
    """ 

    if not settings.SHOP_USE_WISHLIST: 
     raise Http404 

    skus = request.wishlist 
    error = None 
    if request.method == "POST": 
     to_cart = request.POST.get("add_cart") 
     add_product_form = form_class(request.POST or None, 
             to_cart=to_cart) 
     if to_cart: 
      if add_product_form.is_valid(): 
       request.cart.add_item(add_product_form.variation, 1) 
       recalculate_cart(request) 
       message = _("Item added to cart") 
       url = "shop_cart" 
      else: 
       error = list(add_product_form.errors.values())[0] 
     else: 
      message = _("Item removed from wishlist") 
      url = "shop_wishlist" 
     sku = request.POST.get("sku") 
     if sku in skus: 
      skus.remove(sku) 
     if not error: 
      info(request, message) 
      response = redirect(url) 
      set_cookie(response, "wishlist", ",".join(skus)) 
      return response 

    # Remove skus from the cookie that no longer exist. 
    published_products = Product.objects.published(for_user=request.user) 
    f = {"product__in": published_products, "sku__in": skus} 
    wishlist = ProductVariation.objects.filter(**f).select_related("product") 
    wishlist = sorted(wishlist, key=lambda v: skus.index(v.sku)) 
    context = {"wishlist_items": wishlist, "error": error} 
    context.update(extra_context or {}) 
    response = TemplateResponse(request, template, context) 
    if len(wishlist) < len(skus): 
     skus = [variation.sku for variation in wishlist] 
     set_cookie(response, "wishlist", ",".join(skus)) 
    return response 


@never_cache 
def cart(request, template="shop/cart.html", 
     cart_formset_class=CartItemFormSet, 
     discount_form_class=DiscountForm, 
     extra_context=None): 
    """ 
    Display cart and handle removing items from the cart. 
    """ 
    cart_formset = cart_formset_class(instance=request.cart) 
    discount_form = discount_form_class(request, request.POST or None) 
    if request.method == "POST": 
     valid = True 
     if request.POST.get("update_cart"): 
      valid = request.cart.has_items() 
      if not valid: 
       # Session timed out. 
       info(request, _("Your cart has expired")) 
      else: 
       cart_formset = cart_formset_class(request.POST, 
                instance=request.cart) 
       valid = cart_formset.is_valid() 
       if valid: 
        cart_formset.save() 
        recalculate_cart(request) 
        info(request, _("Cart updated")) 
       else: 
        # Reset the cart formset so that the cart 
        # always indicates the correct quantities. 
        # The user is shown their invalid quantity 
        # via the error message, which we need to 
        # copy over to the new formset here. 
        errors = cart_formset._errors 
        cart_formset = cart_formset_class(instance=request.cart) 
        cart_formset._errors = errors 
     else: 
      valid = discount_form.is_valid() 
      if valid: 
       discount_form.set_discount() 
      # Potentially need to set shipping if a discount code 
      # was previously entered with free shipping, and then 
      # another was entered (replacing the old) without 
      # free shipping, *and* the user has already progressed 
      # to the final checkout step, which they'd go straight 
      # to when returning to checkout, bypassing billing and 
      # shipping details step where shipping is normally set. 
      recalculate_cart(request) 
     if valid: 
      return redirect("shop_cart") 
    context = {"cart_formset": cart_formset} 
    context.update(extra_context or {}) 
    settings.use_editable() 
    if (settings.SHOP_DISCOUNT_FIELD_IN_CART and 
      DiscountCode.objects.active().exists()): 
     context["discount_form"] = discount_form 
    return TemplateResponse(request, template, context) 
+0

Если вы просто хотите настроить шаблон, я не понимаю, какие взгляды связаны с ним. Просто скопируйте соответствующий шаблон из картриджа в тот же путь в шаблонах и измените его по своему усмотрению. –

ответ

0

Когда вы попали магазина URL, ваше приложение будет пытаться использовать пустую URL из файла cartridge.shop.urls. Поэтому в основном, когда вы хотели бы, чтобы проверить, какой API/вид называется, идти в этот файл и искать что-то похожее на это:

url(r'^$', 'your-view', name='your-view'), 

нормально после размещения вашей второй URLs файла, который вы следующие параметры:

вы звоните:

  1. /магазин/лист желаний/- вы выполняете представление с именем список пожеланий
  2. /магазин/корзина/- вы выполняете вид имени корзина
  3. /магазин/выписка/полный/- вы выполняете представление с именем полного

так просто найти свой views.py файл, и все эти мнения будут там

+0

Я также проверил, что я открываю urls.py файл приложения магазина и содержит 5 экземпляров url() в urlpatterns. но, я проверил все это тщательно, ни один из них не вызвал. –

+0

Можете ли вы изменить свой вопрос и опубликовать свой файл URL? – sebb

+0

Я разместил его. Теперь вы можете проверить. –