2014-05-22 1 views
1

난 그냥 장고의 클래스 기반의 뷰를 시도 시작했습니다에 대한 어떤 게시물을 발견하고 MonthArchiveView 나를 위해 큰 노력 해왔다하지만 내가 사용하려고 할 때 그것이 나에게 (404) 메시지를주는 YearArchiveView는 말을하지 :장고 YearArchiveView 지정된 연도

아무 게시물은 쿼리

일치를 찾을 수 없습니다 그리고 쿼리와 일치해야한다는 글이있는 것을 알고있다. 예를 들어, /블로그/2014/은 나에게주는 404 만 /블로그/2014/수도/ 그것이

#urls.py 

from django.conf.urls import patterns, include, url 
from django.views.generic import ListView, DetailView 
from blog.models import Post 
from blog.views import PostMonthArchiveView, PostYearArchiveView 

urlpatterns = patterns('blog.views', 
    # main blog page w/ most recent 5 posts 
    url(r'^$', ListView.as_view(
     queryset=Post.objects.all().order_by("-created")[:5], 
     template_name="blog/list.html"), name="blog"), 

    url(r'^(?P<slug>[-\w]+)/$', DetailView.as_view(
     model=Post, 
     template_name="blog/post.html"), name="postdetail"), 
    url(r'^(?P<slug>[-\w]+)$', DetailView.as_view(
     model=Post, 
     template_name="blog/post.html"), name="postdetail"), 

    # Example: /2012/aug/ 
    url(r'^(?P<year>\d{4})/(?P<month>[-\w]+)/$', 
     PostMonthArchiveView.as_view(), 
     name="archive_month"), 
    url(r'^(?P<year>\d{4})/(?P<month>[-\w]+)$', 
     PostMonthArchiveView.as_view(), 
     name="archive_month"), 

    url(r'^(?P<year>\d{4})/$', 
     PostYearArchiveView.as_view(), 
     name="post_year_archive"), 
    url(r'^(?P<year>\d{4})$', 
     PostYearArchiveView.as_view(), 
     name="post_year_archive"), 
) 

나의 견해

#views.py 

from django.shortcuts import render, get_object_or_404 
from blog.models import Post 
from django.views.generic.dates import MonthArchiveView, YearArchiveView 

def post(request, slug): 
    post = get_object_or_404(Post, slug=slug) 

    return render(request, 'blog/post.html', { 
     'post': post, 
     }) 

class PostMonthArchiveView(MonthArchiveView): 
    queryset = Post.objects.all() 
    date_field = "created" 
    make_object_list = True 
    allow_future = True 

class PostYearArchiveView(YearArchiveView): 
    queryset = Post.objects.all() 
    date_field = "created" 
    make_object_list = True 
    allow_future = True 

어떤 도움이 될해야하는지 않습니다 위대한,이 날 꽤 두통이 발생하고 인터넷에서 시도하고이 문제를 해결하는 데 도움이되는 다른 것을 찾을 수 없습니다. 감사! 그것이 DetailView에 의해 발생되고 있음을 당신이지고 있었다 오류를 자세히 보았다, 그리고 더 나은 전체에 게시 싶다면 장고 1.6.2

+0

왜 동일한보기를 가리키는 urls.py의 두 패턴이 있습니까? –

+0

@BurhanKhalid _/blog/some-title/_ 대신 url이 _/blog/some-title_ 인 경우 원래 404를 얻었습니다. 따라서 두 상황 모두를 설명하기 위해 또 다른 URL을 추가했습니다. – Eli

+0

모두에게 좋지 않습니다. 여러 종류의 이유, 특히 SEO의 경우 (두 개의 서로 다른 URL에서 조회수를 분할했기 때문에) 그러나 Django는/blog/some-title에서/blog/some-title /로 리디렉션되는 기본 기능을 포함합니다. ['APPEND_SLASH'] (https://docs.djangoproject.com/en/1.6/ref/settings/#std)를 참조하십시오. : 설정 - APPEND_SLASH). –

답변

0

를 사용하여, 당신이 본 것,하지 :

편집 YearArchiveView. 이는 URL "/ blog/2014 /"가 세부 정보 인 URL '^ (? P [- \ w] +)/$'에 유효하므로 거기에 캡쳐되고 있기 때문에 결코 보관소로 보내지 않습니다 하나씩.

세부 사항에 대한 아카이브보기의 정의를 이동하거나 세부 정규식을보다 구체적으로 지정하여이 문제를 해결할 수 있습니다.

+0

내 블로그가/blog/archive /로 변경되어 DetailView 이전에 올려 놓았습니다. 또한 APPEND_SLASH에 대한 추천에 감사드립니다. 그것에 대해 몰랐고 좋은 일을하고 있습니다. – Eli