我在教程中无法理解网站代码。我所理解的是urls.py接受一个参数作为product_slug,用于在我的show_product视图中获取对象,另一个参数用作template_name 但是什么是论证' catalog_product'这样做是在我的模型中定义的。当我删除' catalog_product'我得到错误:
/ category / guitar没有反向匹配
请解释这个参数get_absolute_url如何工作以及我如何以及在哪里使用它?
model.py是:
def get_absolute_url(self):
return reverse('catalog_product', (), { 'product_slug': self.slug })
我的uurls.py是:
url(r'^product/(?P<product_slug>[-\w]+)/$',show_product, {'template_name':'catalog/product.html'}, 'catalog_product')
和views.py:
def show_product(request, product_slug, template_name="catalog/product.html"):
p = get_object_or_404(Product, slug=product_slug)
categories = p.categories.filter(is_active=True)
page_title = p.name
meta_keywords = p.meta_keywords
meta_description = p.meta_description
return render(request, template_name, locals())
template product.html: -
% extends "catalog.html" %}
{% block content %}
<div class="product_image" >
{% load static %}
<img src="{% static 'images/products/main/{{ p.image}}' %}" alt="{{ p.name }}" />
</div>
<h1>{{ p.name }}</h1>
Brand: <em>{{ p.brand }}</em>
<br /><br />
SKU: {{ p.sku }}
<br />
In categor{{ categories.count|pluralize:"y,ies" }}:
{% for c in categories %}
<a href="{{ c.get_absolute_url }}">{{ c.name }}</a>
{% if not forloop.last %}, {% endif %}
{% endfor %}
<br /><br />
{% if p.sale_price %}
Was: <del>$ {{ p.old_price }}</del>
<br />
Now: $ {{ p.price }}
{% else %}
Price: $ {{ p.price }}
{% endif %}
<br /><br />
[add to cart button]
<br /><br />
<div class="cb"><br /><br /></div>
<h3>Product Description</h3>
{{ p.description }}
{% endblock %}