I'm a beginner of Django I want to set my url with database field_name instead of use primary key from Django tutorial. This is my code.
*mysite*
**dwru/urls.py**
urlpatterns = [
url(r'^$', include('product.urls', namespace="product")),
]
*myapp*
**product/urls.py**
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<name_catalog>[-_\w]+)/$', views.product_list_from_index, name='catalog'),
]
**product/views.py**
def product_list_from_index(request, name_catalog):
catalog = get_object_or_404(Catalog, name_catalog=name_catalog)
context = {
'catalog': catalog
}
return render(request,'product/product_list.html', context)
**product/models.py**
class Catalog(models.Model):
name_catalog = models.CharField(max_length=45)
product = models.ManyToManyField(Product)
**template/product/index.html**
{% for catalog in catalog_list %}
<h1><a href="{% url 'product:catalog' catalog.name_catalog %}">{{ catalog.name_catalog }}</h1>
{% endfor %}
Then I add Catalog field with "TestCa01" then it shown an error
NoReverseMatch at /
Reverse for 'catalog' with arguments '(u'TestCa01',)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'$(?P<name_catalog>[-_\\w]+)/$']
it kind of some problem with this line in template
{% url 'product:catalog' catalog.name_catalog %}
any Idea?
> > I'm a beginner of Django I want to set my url with database field_name
> > instead of use primary key from Django tutorial. This is my code.
> >
> > *mysite*
> > **dwru/urls.py**
> > urlpatterns = [
> > url(r'^$', include('product.urls', namespace="product")),
> > ]
>
> This regex is incorrect, and will only match a URL of '/', which is
> probably not what you want (since you are making other URL's like
> '/TestCA01' down below). You need to remove the $ from the regex to
> pass along the entire URL string to the include. You probably need a
> slash in there also to remove it as a prefix when it is passed along
> to the include:
>
> url(r'^/', include('product.urls', namespace="product")),
>
I was thinking about this and you may not need the /, if it doesn't work, try without it. I'm not in front of a computer to verify.
-James