이것은 장고 (1.4)에서 클래스 기반 뷰를 사용한 첫 번째 프로젝트이며 URL을 반환하지 않는 날짜 기반 아카이브에 약간의 문제가 있습니다. 필자는 프로젝트가 필요없는 회사의 인트라넷에 몇 가지 앱을 성공적으로 만들었지 만 사이트의 '뉴스'부분에는 실제로 날짜 기반 아카이브가 필요합니다.URL 및 django 클래스 기반 뷰
년, 월 및 일 아카이브는 모두 정상적으로 작동하지만 내 개별 기사는 내가 생각하는 URL을 생성하지 않습니다. 나는 확실히 내가 문제가 모델 get.py 내에서 get_absolute_url 함수에 있다고 확신하기 때문에 URL을 입력하면 직접 원하는 장고를 찾고 표시 할 수 있기를 원하기 때문이다! 내가 얻을 쉘에서
호출 get_absolute_url 기능 :
NoReverseMatch: Reverse for 'news_detail' with arguments '('2013', 'Jan', '14', 'another-news-thang')' and keyword arguments '{}' not found.
나는 relevant docs 읽고 DateDetailView에 대한 특정 참조하지만 잘못된거야 어디 아주 내 머리 라운드를 얻을 수 없다했습니다.
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는 다음과 같습니다 :
내 models.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'),
)
약간 지저분한 코드에 대한 죄송합니다; 나는 일을 끝내면 일을 청소하는 경향이 있습니다. 어떤 도움을 많이 주셨습니다.
완벽하기 때문에 나는 이런 식으로 간단 할 것임을 알았습니다. 감사. –