0

JamesBennettのPracticalDjangoProjectsのcoltrane(djangoブログ)の例に従って、自分のカスタムブログの出発点を教えてください。私は最初の章でほとんどの作業を行ってブログをすべて揃えることができましたが、彼が一般的なビューに切り替えると壊れているようです。

次のviews.pyを使用すると、ブログが機能します。

def entry_list(request):
    return render_to_response('blog/entry_listing.html',
                              { 'entry_list': Entry.objects.all() },
                              context_instance=RequestContext(request))

def entry_detail(request, year, month, day, slug):
    date_stamp = time.strptime(year+month+day, "%Y%b%d")
    publish_date = datetime.date(*date_stamp[:3])
    entry = get_object_or_404(Entry, publish_date__year=publish_date.year,
                              publish_date__month=publish_date.month,
                              publish_date__day=publish_date.day,
                              slug=slug)
    return render_to_response('blog/entry_detail.html',
                              { 'entry': entry },
                              context_instance=RequestContext(request))

urls.py:

entry_info_dict = {
    'queryset': Entry.objects.all(),
    'date_field': 'publish_date',
    }

urlpatterns = patterns('',
('^blog/$','blog.views.entry_list'),
('^blog/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$','django.views.generic.date_based.object_detail',entry_info_dict),)

これらを使用して、ブログエントリのリストを作成し(最初のURLパターンを使用)、次に「詳細ビュー」を入力してエントリ全体を表示できます(2番目のURLパターンを使用)。

次に、urls.pyを交換して、一般的なビューを使用してメインのブログリストを表示することをお勧めします。これにより、url.pyは次のようになります。

entry_info_dict = {
    'queryset': Entry.objects.all(),
    'date_field': 'publish_date',
    }

urlpatterns = patterns('',
('^blog/$', 'django.views.generic.date_based.archive_index', entry_info_dict),
('^blog/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$','django.views.generic.date_based.object_detail',entry_info_dict),)

テンプレートに対応する変更を加えます(この汎用ビューはデフォルトで_archive.htmlテンプレートであるため、entry_archive.htmlを作成し、参照として「entry」ではなく汎用「object」を使用するようにします)が、何もしません現れます。

テンプレートは次のとおりです。

entry_archive.html

{% extends "base.html" %}

{% block content %}

<p>These are public blog entries.</p>

<ul>
  {% for object in object_list %}
  {% if object.status == object.LIVE_STATUS %}

  {% include "blog/entry_summary.html" %}

  {% endif %}
  {% endfor %}
</ul>

{% endblock %}

entry_summary.html

<div class="blog_entry">
  <h2 class="blog_title">{{ object.title }}</h2>
  <div class="blog_date">Published on {{ object.publish_date }}</div>
  <div class="blog_summary">{{ object.summary }}</div>
  <div class="blog_image"></div>
  <div class="blog_url"><a href="{{ object.get_absolute_url }}">Read full entry</a></div>
</div>

何がうまくいかないかについて何か考えはありますか?

4

1 に答える 1

0

答えが見つかりました -- 問題は、archive_index ジェネリック ビューがすべてのエントリを含む「latest」というオブジェクトを返し、「object_list」というオブジェクトではありません!

于 2013-02-12T02:29:28.007 に答える