2014-05-22 69 views
1

我剛開始嘗試Django的基於類的意見和對我MonthArchiveView一直很大,但是當我嘗試使用它給了我一個404消息YearArchiveView說:Django的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 

任何幫助將是什麼太棒了,這一直讓我非常頭疼,而且在互聯網上找不到其他任何東西來嘗試幫助排除故障。謝謝!

編輯:使用Django 1.6.2

+0

爲什麼你的urls.py中有兩種模式指向相同的視圖? –

+0

@BurhanKhalid最初我是如何得到一個404如果URL是_/blog/some-title_而不是_/blog/some-title/_所以我增加了另一個來解決這兩種情況 – Eli

+0

這對所有人都不好各種原因,特別是對於搜索引擎優化(因爲你現在已經跨兩個不同的網址分割點擊)。但是Django包含了從/ blog/some-title重定向到/ blog/some-title /的默認功能 - 請參閱['APPEND_SLASH']「(https://docs.djangoproject.com/en/1.6/ref/settings/#std :設置 - APPEND_SLASH)。 –

回答

0

如果你在錯誤仔細看,你都拿到,甚至更好的貼吧中全,你會看到,它是由的DetailView造成的,不YearArchiveView。這是因爲URL「/ blog/2014 /」適用於詳細信息 URL'^(?P [ - \ w] +)/ $',因此在那裏被捕獲 - 它永遠不會將其存檔一個。

您可以通過將存檔視圖的定義移動到詳細信息的定義之上來解決此問題,或者可能通過使詳細信息正則表達式更具體。

+0

將我的網址更改爲/ blog/archive /並將它放在DetailView之前,現在它工作得很好!也感謝您對APPEND_SLASH的建議。不知道這一點,它也很好 – Eli

相關問題