これは、django(1.4)でクラスベースのビューを使用して行った最初のプロジェクトであり、日付ベースのアーカイブがURLを返さないという問題が発生しています。プロジェクト(企業イントラネット)で、それらを必要としないいくつかのアプリを正常に構築しましたが、サイトの「ニュース」部分には、日付ベースのアーカイブが本当に必要です。
年、月、日のアーカイブはすべて正常に機能しているように見えますが、私の個々の記事では、本来あるべきURLが生成されていません。この問題はmodels.pyのget_absolute_url関数にあると確信しています。これは、URLを入力すると、djangoが必要な記事を直接検索して表示できるようにするためです。
私が得るシェルからget_absolute_url関数を呼び出す:
NoReverseMatch: Reverse for 'news_detail' with arguments '('2013', 'Jan', '14', 'another-news-thang')' and keyword arguments '{}' not found.
DateDetailViewの関連ドキュメントと特定のリファレンスを読みましたが、うまくいかないところに頭を悩ませることはできません。
私のmodels.pyは次のとおりです。
from django.db import models
import datetime
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from phone_list.models import Person, Team
from tinymce import models as tinymce_models
from taggit.managers import TaggableManager
from easy_thumbnails.fields import ThumbnailerImageField
class LiveNewsManager(models.Manager):
def get_query_set(self):
return super(LiveNewsManager, self).get_query_set().filter(status=self.model.LIVE_STATUS)
class News(models.Model):
LIVE_STATUS=1
DRAFT_STATUS=2
HIDDEN_STATUS=3
STATUS_CHOICES=(
(LIVE_STATUS, 'Live'),
(DRAFT_STATUS, 'Draft'),
(HIDDEN_STATUS, 'Hidden'),
)
# core fields
headline=models.CharField(max_length=250)
image = ThumbnailerImageField(
upload_to='news_images',
resize_source=dict(size=(700, 500), sharpen=True),
null=True,
blank=True,
help_text = "Optional. Photographs added here are given 'feature' status and should be landscape oriented.",
)
image_caption=models.CharField(
max_length=144,
blank=True,
help_text = "DO NOT ADD IF THERE IS NO FEATURE IMAGE",
)
story = tinymce_models.HTMLField()
pub_date=models.DateTimeField(default=datetime.datetime.now)
# metadata
writer=models.ForeignKey(Person)
enable_comments=models.BooleanField(default=True)
featured=models.BooleanField(default=False)
slug=models.SlugField(unique_for_date='pub_date')
status=models.IntegerField(choices=STATUS_CHOICES, default=LIVE_STATUS)
# categorization
tags=TaggableManager()
objects=models.Manager()
live=LiveNewsManager()
class Meta:
verbose_name_plural='News articles'
ordering=['-pub_date']
def pictures(self):
try:
return [self.image]
except:
pass
def get_absolute_url(self):
return reverse ('news_detail', args = [str(self.pub_date.strftime("%Y")), str(self.pub_date.strftime("%b")), str(self.pub_date.strftime("%d")), str(self.slug)])
def __unicode__(self):
return self.headline
そして私のurls.pyは:
from django.conf.urls import patterns, include, url
from haystack.forms import ModelSearchForm
from haystack.query import SearchQuerySet
from haystack.views import SearchView
from django.views.generic import ArchiveIndexView, YearArchiveView, MonthArchiveView, DayArchiveView, DateDetailView
from datetime import date
from news.models import News
sqs = SearchQuerySet().models(News)
urlpatterns = patterns('',
url(r'^$', ArchiveIndexView.as_view(
date_field = 'pub_date',
model=News,
context_object_name="latest_news",),
),
url(r'^(?P<year>\d{4})/$', YearArchiveView.as_view(
date_field = 'pub_date',
model=News,
context_object_name="year_archive",),
),
url(r'^(?P<year>\d{4})/(?P<month>\w{3})/$', MonthArchiveView.as_view(
date_field = 'pub_date',
model=News,
context_object_name="month_archive",),
),
url(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$', DayArchiveView.as_view(
date_field = 'pub_date',
model=News,
context_object_name="day_archive",),
),
url(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$', DateDetailView.as_view(
date_field = 'pub_date',
model=News,
context_object_name="news_detail",),
),
url(r'^search/$', SearchView(
template='news/search.html',
searchqueryset=sqs,
), name='haystack_search'),
)
少し厄介なコードでごめんなさい。動作させたら、クリーンアップする傾向があります。どんな助けでも大歓迎です。