2011-02-27 31 views
0

給404我想用一個相當標準/ <應用> /<年> /<個月> /<天>/<塞>模型使用固定鏈接在Django。但是,我得到任何的附加信息date_based在object_detail並Django的

urls.py 404包括races.urls使用

(r'^races/', include('races.urls')), 

我的種族/ urls.py如下:

from django.conf.urls.defaults import * 
from django.views.generic import date_based 
from races.models import Race 

info_dict = { 
    'date_field': 'date', 
    'month_format': '%m', 
    'queryset': Race.objects.all, 
    'year': 'year', 
    'month': 'month', 
    'day': 'day', 
} 

urlpatterns = patterns('', 
    (r'^$', 'races.views.index'), 
    (r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})$', 
     date_based.archive_day, dict(info_dict)), 
    url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[-\w]+)', 
     date_based.object_detail, 
     dict(info_dict, slug_field='slug', slug='slug', 
      template_name='races/race_detail.html'), 
     name = 'race_detail'), 
) 

我的種族/模型。 py已有

from django.db import models 
from django.template.defaultfilters import slugify 

class Race(models.Model): 
    STATUS_CHOICES = (
     ('Completed', 'Completed'), 
     ('Entered', 'Entered'), 
     ('Planned', 'Planned'), 
     ('DNS', 'DNS'), 
     ('DNF', 'DNF'), 
    ) 
    name = models.CharField(max_length=100) 
    date = models.DateField('race date') 
    time = models.TimeField('race duration', null = True) 
    status = models.CharField(max_length=10, choices = STATUS_CHOICES) 
    slug = models.SlugField(max_length=100, editable = False) 

    def save(self, *args, **kwargs): 
     if not self.id: 
      self.slug = slugify(self.name) 
     super(Race, self).save(*args, **kwargs) 

    def __unicode__(self): 
     return self.name 

    @models.permalink 
    def get_absolute_url(self): 
     return('race_detail',(), { 
      'year': self.date.year, 
      'month': self.date.month, 
      'day': self.date.day, 
      'slug': self.slug }) 

測試比賽肯定出現在DB

mysql> select * from races_race; 
+----+---------------------+------------+----------+-----------+---------------------+ 
| id | name    | date  | time  | status | slug    | 
+----+---------------------+------------+----------+-----------+---------------------+ 
| 1 | Race Your Pace Half | 2011-02-20 | 01:41:15 | Completed | race-your-pace-half | 
+----+---------------------+------------+----------+-----------+---------------------+ 

但是,URL http://localhost:8000/races/2011/02/20/race-your-pace-half不起作用。

我確定這是相當明顯的事情,需要一段時間才能完成上述工作。

另一方面,永久鏈接也不起作用 - 即{{race.get_absolute_url}}在我的模板中顯示爲空白,我只是不知道它是我的模型還是我的URLconf是錯誤的。

回答

0

我從來沒有使用一個通用的觀點,而是一個無差錯404我猜來自這裏:

try: 
    tt = time.strptime('%s-%s-%s' % (year, month, day), 
         '%s-%s-%s' % ('%Y', month_format, day_format)) 
    date = datetime.date(*tt[:3]) 
except ValueError: 
    raise Http404 

我不知道你info_dict是壓倒任何「真正」的意見,因爲我注意到你爲每個必填字段傳遞字符串參數('day': 'day'

刪除'day', 'year', and 'month'作爲您在info_dict中的參數,因爲您的URL已經捕獲併發送這些參數。

之後,我想知道你是否會得到AttributeError,因爲Race.objects.all是一個函數而不是QuerySet

讓我知道結果如何!

+0

是的,除了從查詢集中刪除.all,也解決了404問題。然後,我得到了一個帶有空標記的頁面,但那是因爲我沒有設置template_object_name(我在模板中使用race而不是object)。 – 2011-02-27 11:54:19