私はブログのdjangoアプリケーションを持っています。ブログのエントリは、/ year/month/day/slugのURLパターンを通してアクセスできます。うまくいきます。 私の問題は、ウェブサイト上のどのテンプレートでもアクセス可能なアーカイブリストを作成したいのです。だから私は最高のソリューションを作成し、必要な情報を返すtemplatetagを作成することだと思った。django templatetagsのアーカイブリスト
私はアーカイブの形式は以下のようなことがしたかった:
August 2011
July 2011
etc..
2010
2009
2008
etc..
だからだけで、現在の年のために数ヶ月を示しています。
これは私が思い付いたタグである:あなたが名前とURLを含む、タプルのリストを返すイムを見ることができるように
from django.template import Library, Node, TemplateSyntaxError
from core.blog.models import Entry
import datetime, calendar
register = Library()
class ArchiveNode(Node):
def __init__(self, varname):
self.varname = varname
def render(self, context):
temp = list()
#Get Info about the first post
first = Entry.objects.order_by("pub_date")[0]
first_year = first.pub_date.year
first_month = first.pub_date.month
#Loop over years and months since first post was created
today = datetime.datetime.today()
this_year = today.year
this_month = today.month
for year in range(this_year - first_year):
if year != this_year:
temp += (year,'/blog/'+year+'/')
else:
for month in range(this_month - first_month):
month_name = calendar.month_name[month]
temp += (month_name+" "+year,'/blog/'+year+'/'+month+'/')
context[self.varname] = temp.reverse()
return ''
@register.tag
def get_archive(parser, token):
bits = token.contents.split()
if len(bits) != 3:
raise TemplateSyntaxError, "get_archive tag takes exactly 1 argument"
if bits[1] != 'as':
raise TemplateSyntaxError, "second argument to get_archive tag must be 'as'"
return ArchiveNode(bits[2])
。 これはdjangoで有効でしょうか?またはいくつかのdjangoコンテナに情報をパックする必要がありますか? (何も返されないようです)
これはctrl-dev.com/blogで働いているサイトです。 アーカイブは右下の緑色のボックスに表示されます。
あなたの返信ありがとう、助けてくれた:)リンクは素晴らしい読書だった。あなたが提案したように終わり、タイトル、年、月のdictを返します。次に、このようなURLを取得します。{%url EntryByMonth link.year link.month%} – mXed
助けられたと聞いてうれしいです! –