1

私は以前、自分のサイトの別のページにそのようなアーカイブを作成しました。しかし、今回はDjangoが私に協力したくないようです。

class IndexView(ArchiveIndexView):
    template_name = 'cms/blog_base.html'
    date_field = 'pub_date'
    latest = '20'
    model = Entry

In template {% for year in date_list %} {{ year|date:"Y" }} gives me a date relating to none of my entries. {% for entry in object_list % } {{ entry.pub_date|date:"Y" }} obviously outputs the correct date for the entry but as the entries grow I can only imagine it will continue to duplicate the years and months.

だから私は何が間違っているのですか?日付をエントリのセットに関連付けるには、ArchiveIndexViewとテンプレートタグで何をする必要がありますか?以前は、それらは別々のページにあったため、URLconfの正規表現によってフィルタリングされていました。私が見た解決策の1つは、生のSQLを使用してカスタムマネージャーを作成することでした。もしそうなら、私はこれをすべて一緒に再考します。事前にコミュニティに感謝します。

更新:例:ホームページに表示したいものは、このページに表示されているものと似ていますhttps://unweb.me/blog/monthly-archives-on-Django 私も今、彼らの解決策を試してみようと考えています。素敵なUI/UXのように。しかし、私は単純な人間であり、もしあれば単純なルートをたどりたいと思っています。

4

2 に答える 2

3

再グループ化機能をお探しですか?

例:

{% regroup object_list by date_field|date:"Y" as year_list %}
{% for year in year_list %}
    {% regroup year.list by date_field|date:"F" as month_list %}
    {% for month in month_list %}
        {{ month.grouper }} / {{ year.grouper }} <br />
        {{ month.list }}
    {% endfor %}
{% endfor %}
于 2012-09-28T06:14:29.057 に答える
2

短いブログチュートリアルからオンラインで見つけたより良い解決策は、次のことを実装しています。動作することを確認します。

def mkmonth_lst():
"""Make a list of months to show archive links."""
if not Post.objects.count(): return []

# set up vars
year, month = time.localtime()[:2]
first = Post.objects.order_by("created")[0]
fyear = first.created.year
fmonth = first.created.month
months = []

# loop over years and months
for y in range(year, fyear-1, -1):
    start, end = 12, 0
    if y == year: start = month
    if y == fyear: end = fmonth-1

    for m in range(start, end, -1):
        months.append((y, m, month_name[m]))
return months

def main(request):
"""Main listing."""
posts = Post.objects.all().order_by("-created")
paginator = Paginator(posts, 10)
try: page = int(request.GET.get("page", '1'))
except ValueError: page = 1

try:
    posts = paginator.page(page)
except (InvalidPage, EmptyPage):
    posts = paginator.page(paginator.num_pages)

return render_to_response("list.html", dict(posts=posts, user=request.user,
                                            post_list=posts.object_list,    months=mkmonth_lst()))

# The template info
    <div id="sidebar">
    Monthly Archive
    <p>
    {% for month in months %}
        {% ifchanged month.0 %} {{ month.0 }} <br /> {% endifchanged %}
        <a href="{% url blog.views.month month.0 month.1 %}">{{ month.2 }}</a> <br />
    {% endfor %}
    </p>
</div>

これにより、投稿のみを含む月を含む1年ごとのリストがホームページに生成されます。

于 2012-10-10T22:06:55.987 に答える