2014-04-14 1 views
1

내 localhost : 8000을 열려고 시도 할 때마다이 오류가 발생합니다. 작업중인 앱의 홈페이지가됩니다. 다음은 반대 역응 이유가 없습니까?

NoReverseMatch at/
Reverse for 'category_detail' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['category/(?P<slug>[\\-\\w]+)/$'] 

는 템플릿에 사용 {%의 URL을 %}, 내 models.py, 내 urls.py하고 무슨 일

views.py의? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

#in Template. 
<a href="{% url 'category_detail' %}" class="button tiny">View</a> 

#my urls.py 
from django.conf.urls import patterns, url 
from . import views 

urlpatterns = patterns('', 
    url(r'^$', views.home.as_view(), name='home'), 
    url(r'^categories/$', views.MyCategory.as_view(), name='all_categories'), 
    url(r'^category/(?P<slug>[-\w]+)/$', views.CategoryDetail.as_view(), name='category_detail'), 
    url(r'^tip/(?P<slug>[-\w]+)/$', views.ToolkitDetail.as_view(), name='toolkit_detail'), 
) 

#my models.py 
from django.db import models 
from django.core.urlresolvers import reverse 


class Category(models.Model): 
    slug = models.SlugField() 
    title = models.CharField(max_length=250) 
    heading = models.CharField(max_length=750) 
    description = models.TextField() 
    link = models.URLField() 

    def get_absolute_url(self): 
     return reverse('category_detail', kwargs={'slug': self.slug}) 

#my views.py 
class MyCategory(ListView): 
    model = Category 
    context_object_name = 'category' 
    template_name = 'category.html' 

class CategoryDetail(DetailView): 
    slug_field = 'slug' 
    model = Category 
    slug_url_kwarg = 'slug' 
    context_object_name = 'category' 
    template_name = 'category_detail.html' 

위의 내용은 내 문제의 요약입니다. 제발 어떤 도움을 주시면 감사하겠습니다. 그것의 명확한 내 문제가 확실 해요,하지만 StackOverflow 날 텍스트를 추가하지 않고 게시 할 수 없기 때문에, 그렇게하고 있어요. 나는 위의 발췌 부분이 내 문제에 대해 자명하다고 생각한다. 나는 지금 게시하기 위해 풀려났다.

답변

4

귀하의 URL 이름 'category_detail'에 필수 매개 변수 - 슬러그가 있습니다. 그래서 템플릿에 당신은 쓸 수 : 모델로

<a href="{% url 'category_detail' category.slug %}" class="button tiny">View</a> 

당신이 간단하게 할 수있는 URL을 생성하기위한 특별한 방법이 있습니다

{{ category.get_absolute_url }} 
+0

뭐라 구요, 유진, 당신의 첫 번째 제안은 효과가 없었습니다. 그러나 두 번째 접근법은 Baaam !! 나를 위해. 그것은 효과가있다! 하지만 그것은 여전히 ​​{% url 'text'%}를 이전 프로젝트에서 장고 1.5 버전을 사용하여 성공적으로 사용했기 때문에 여전히 궁금합니다. 그렇다면 갑자기 URL이 작동하지 않는 이유는 무엇입니까? 또는 그것도 URL의 정규식과 관련이있어? 도움 주셔서 감사합니다. 지금 내 페이지를 연결할 수있어 기쁩니다. – Rexford

+1

답변으로 작성한대로 url 이름 뒤에 url 템플릿 태그에 필수 매개 변수를 전달해야합니다. 이 매개 변수는 urls.py 및 view 함수에서 결정됩니다. 당신이 말한 것처럼 일찍 코드가 작동한다는 것은 이상한 일입니다. 장고는 admin에서 get_absolute_url 메소드를 사용합니다. 사용자 정의 템플릿에서 필자가 직접 작성한 템플릿을 호출해야합니다. https://docs.djangoproject.com/en/dev/ref/models/instances/#get-absolute-url –

+0

알겠습니다. 둘 다 작동합니다. 첫 번째 제안으로 처음에는 제대로하지 않았습니다. 존재하지 않는 변수를 호출했습니다. 나는 이것을 알고있어서 기쁩니다. 당신의 도움을 주셔서 감사합니다. – Rexford

-1

템플릿에 {% url 'category_detail' %}이 포함되어 있습니다. 즉, 필요한 slug 키워드 인수를 제공하지 않고 'category_detail'URL 패턴을 역전하려고합니다. 작동 가능 :

{% url 'category_detail' slug="foo" %} 
+0

을 그래서 넣어 않는 것을 슬러그 = "foo는"의를 " foo "부분은 동적으로 생성되기 때문에? 흥미로운 대답. – Rexford

+0

category_detail은 일반적으로 특정 카테고리의 상세 정보 _이므로 원하는 범주를 지정해야합니다. 당신은 슬러그를 공급함으로써 그렇게합니다. – che