Помощь с общими представлениями на основе даты django

Я впервые использую общие представления на основе даты. У меня заработала страница архива, но по какой-то причине, когда я создаю ссылку на страницу сведений с помощью метода get_absolute_url, страница архива просто перезагружается. Любое понимание будет полезно, спасибо.

вот мой url.py

blog_info_dict = {
'queryset': News.objects.all(), \
'date_field': 'date_created'
}

urlpatterns = patterns('django.views.generic.date_based',
 (r'^news/$', 'archive_index', alumni_info_dict, 'blog_news_archive_index'),
 (r'^news/(?P<year>\d{4})/$', 'archive_year', \
 blog_info_dict, 'blog_news_archive_year'),
 (r'^news/(?P<year>\d{4})/(?P<month>\w{3})/$', 'archive_month', \
 blog_info_dict, 'blog_news_archive_month'),
 (r'^news/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$', \
 'archive_day', blog_info_dict, 'blog_news_archive_day'),
 (r'^news/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[-w]+)/$'\
  , 'object_detail', blog_info_dict,'blog_news_detail'),
 )

models.py

class News(models.Model):
      title = models.CharField('News Title', max_length=60)
      slug = models.SlugField(editable=False)
      image = models.ImageField('Image', null=True, blank=True, upload_to='uploaded_images/')
      comments = models.TextField('News Content', null=True, blank=True)
      date_created = models.DateTimeField('Date Posted', auto_now=True)
      created_by = models.ForeignKey(User)

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

      @models.permalink
      def get_absolute_url(self):
          return('blog_news_detail', (), { \
          'year': self.date_created.strftime("%Y"),
          'month': self.date_created.strftime("%b").lower(),
          'day': self.date_created.strftime("%d"),
          'slug': self.slug })

шаблон news_archive.html

{% extends "index.html" %}
{% block content %}
 {% for news in latest %}
 <p><a href="{{ news.get_absolute_url }}">{{ news.title }}</a> </p>
  <p>{{ news.comments }}</p>
 {% endfor %}
 {% endblock %}

news_detail.html

{% extends "news_archive.html" %}
{% block content %}
 <p>{{ object.title }}</p>
{% endblock %}

Просмотр объекта новостей

def news_view(request):
    if request.method == 'POST':
        form = NewsForm(request.POST, request.FILES)
        if form.is_valid():
            news_instance = News( \
            title = form.cleaned_data['title'],
            image = form.cleaned_data['image'],
            comments = form.cleaned_data['comments'],
            created_by = request.user)
            news_instance.save()
     else:
         form = NewsForm()
     variables = RequestContext(request, {'form': form})
        return render_to_response('news_page.html', variables)

форма модели новостей

class NewsForm(forms.ModelForm):
    class Meta:
        model = News
        fields = ('title', 'image', 'comments',)

person Paul Johnson    schedule 15.04.2011    source источник
comment
Привет, Пол, я только что быстро отредактировал твой вопрос, чтобы отформатировать код. Вы можете отформатировать код в вопросе, сделав отступ в 4 пробела или выделив его и нажав кнопку {} в редакторе.   -  person Andy White    schedule 15.04.2011
comment
работают ли ваши подробные страницы, если вы вручную вводите URL-адреса?   -  person dting    schedule 15.04.2011
comment
Как вы создали объекты News. Не похоже, что у вас есть представление создания в вашем urlconf. Проверьте slugfield ваших объектов.   -  person dting    schedule 16.04.2011
comment
Привет, DTing, я только что разместил свой объект новостей выше, slugfield сохраняется. Я проверил БД.   -  person Paul Johnson    schedule 16.04.2011


Ответы (1)


Только что понял, что мне нужно определить представление и передать год, месяц, день и слаг, а также переписать URL-адрес.

просмотреть

from django.views.generic import list_detail

def news_detail_view(request, year, month, day, slug):
    response = list_detail.object_detail( \
    queryset = News.objects.all(), \
    slug = slug, slug_field = 'slug')
    return response

url.py

from news.views import news_detail_view

blog_info_dict = {
'queryset': News.objects.all(), \
'date_field': 'date_created'
}



urlpatterns = patterns('django.views.generic.date_based',
     (r'^news/$', 'archive_index', alumni_info_dict, 'blog_news_archive_index'),
     (r'^news/(?P<year>\d{4})/$', 'archive_year', \
     blog_info_dict, 'blog_news_archive_year'),
     (r'^news/(?P<year>\d{4})/(?P<month>\w{3})/$', 'archive_month', \
     blog_info_dict, 'blog_news_archive_month'),
     (r'^news/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$', \
     'archive_day', blog_info_dict, 'blog_news_archive_day'),
     (r'^news/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[\w-]+)/$',\
      news_detail_view, 'blog_news_detail'),
     )
person Paul Johnson    schedule 17.04.2011