【发布时间】:2012-12-28 23:26:38
【问题描述】:
这是我在 django (1.4) 中使用基于类的视图完成的第一个项目,我在基于日期的存档不返回 URL 时遇到了一些问题。我已经在我的项目(企业内部网)中成功构建了几个不需要它们的应用程序,但网站的“新闻”部分确实需要基于日期的存档。
年月日档案似乎都可以正常工作,但我的个人文章没有生成我认为应该的 URL。我很确定问题出在 models.py 中的 get_absolute_url 函数中,因为如果我输入 URL,我希望他们直接拥有 django 会找到并显示我想要的文章!
从我得到的 shell 调用 get_absolute_url 函数:
NoReverseMatch: Reverse for 'news_detail' with arguments '('2013', 'Jan', '14', 'another-news-thang')' and keyword arguments '{}' not found.
我已阅读 relevant docs 和 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'),
)
抱歉,代码有点乱;一旦我让它们工作,我倾向于清理它们。非常感谢任何帮助。
【问题讨论】:
标签: python django django-views django-urls