Почему date_based.archive_month в Django 1.3 не работает для показа моих сообщений в блоге? - PullRequest
1 голос
/ 05 ноября 2011

Я просто пытаюсь перечислить свои записи в блоге за определенный месяц за определенный год, но ни одна из моих публикаций не отображается. Когда я набираю правильный URL-адрес: 2011 / nov, сообщения не отображаются, и у меня есть сообщения за ноябрь 2011, сохраненные в моем администраторе.

Кроме того, по некоторым причинам, мой файл CSS не принимается во внимание. Когда я перехожу на URL 2011 / nov, я просто получаю HTML без стилей и ни одного из своих постов. Что я здесь не так делаю?

#models.py
class Post(models.Model):
    title = models.CharField(max_length=120)
    slug = models.SlugField(max_length=120, unique = True)
    body = models.TextField()
    published = models.DateTimeField(default=datetime.now)
    categories = models.ManyToManyField(Category)

    def __unicode__(self):
        return self.title

#urls.py
info_dict = {
    'queryset': Post.objects.all(),
    'date_field': 'published',
}

urlpatterns = patterns('',
    (r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$',
    date_based.archive_month,
    dict(info_dict, template_name='blog/archive.html',)),

#blog/archive.html
<link href="../static/style.css" rel="stylesheet" type="text/css" media="screen" />
.
.
.
{% for post in post_list %}
<h3 class="title"><a href="{% url single_post slug=post.slug %}">{{post.title}}</a>    
</h3>                        
{% endfor %}

Ответы [ 3 ]

1 голос
/ 05 ноября 2011
  1. CSS не отображается, поскольку вы определяете его относительно ../static/style.css.Когда адрес /2011/jan, браузер пытается получить CSS от /2011/static/style.css.Исправление: Установите путь, чтобы быть абсолютным: /static/style.css.

  2. Вы должны проходить через объект с именем object_list вместо post_list.

    {% for post in object_list %}

0 голосов
/ 05 ноября 2011

В дополнение к тому, что пастилеги написали выше, вы также должны изменить эту строку

published = models.DateTimeField(default=datetime.now)

к этому:

published = models.DateTimeField(auto_now_add=True)

В Python именованные аргументы оцениваются только один раз . Это означает, что значение published по умолчанию - это время, когда ваш сервер последний раз компилировал файл models.py. Django предлагает решение этой проблемы: установив параметр auto_now_add=True, заставляет django использовать фактическое текущее время для поля, при его первом создании . Точно так же установка auto_now=True заставляет django устанавливать текущее время для поля всякий раз, когда оно сохраняется .

0 голосов
/ 05 ноября 2011

Переменная контекста, которая содержит сообщение, называется object_list , а не post_list , поэтому вы должны иметь:

{% for post in object_list %}
...
{% endfor %}

https://docs.djangoproject.com/en/dev/ref/generic-views/?from=olddocs#django-views-generic-date-based-archive-month

Ваш файл css должен быть:

, и если вы разрабатываете локально, вам нужно настроить сервер разработки для сервера ваших медиафайлов:

https://docs.djangoproject.com/en/dev/howto/static-files/#using-django-contrib-staticfiles

...