Entry
データベース Entries があり、現在の項目をtemplate に表示したいと考えていますentry.html
。次に、サイドバーに前のエントリ (存在する場合) と次のエントリ (存在する場合) へのリンクを表示します。これは私の現在のviews.pyです:
def entry(request, projects_id=1, entries_id=1):
entries_list = Entries.objects.filter(project_id=projects_id)
paginator = Paginator(entries_list, 1)
page = request.GET.get('page')
try:
all_entries = paginator.page(page)
except PageNotAnInteger:
all_entries = paginator.page(1)
except EmptyPage:
all_entries = paginator.page(paginator.num_pages)
return render_to_response('entry.html',
{'projects': Projects.objects.get(id=projects_id),
'entry': Entries.objects.get(project_id=projects_id, entry_unique=entries_id),
'all_entries': all_entries}
)
これは、テンプレート内の現在のページネーター呼び出しコードです。
{% if all_entries.has_previous %}
<a href="/projects/get/{{projects.id}}/entries/get/{{entry.entry_unique|add:"-1"}}"><img src="/static/assets/img/arrow_left.png" width="40"></a>
{% endif %}
{% if all_entries.has_next %}
<a href="/projects/get/{{projects.id}}/entries/get/{{entry.entry_unique|add:"1"}}"><img src="/static/assets/img/arrow_right.png" width="40"></a>
{% endif %}
現在の問題は、右矢印のみが表示され、左矢印は表示されず、現在のエントリの後にエントリがあるかどうかに基づいていないことです。entry_unique と id フィールドがエントリごとに異なるように設定しました。エントリがサイト全体ではなく、プロジェクトごとに 1 ずつ増加するようにするためです。
これはエントリの私のモデルです:
class Entries(models.Model):
project_id = models.ForeignKey(Projects)
entry_unique = models.IntegerField(default=0)
entry_pubdate = models.DateTimeField('date published')
したがって、私の主な問題は、エントリ テーブルにはid
列がありますが、project_id
どのプロジェクトがエントリを所有しているかを判断する方法であり、entry_unique
エントリ 1 が 1、エントリ 2 が 2 になるように、プロジェクトごとに 1 つずつ増加しid
ます。は。
ただし、paginator を使用すると、previous_entry 矢印は表示されず、next_entry 矢印のみが表示されます。これは、別の entry_unique があるかどうかとは関係ありません。つまり、基本的には project_id で並べ替えて、作業しているエントリを特定していますが、それらのエントリを entry_unique で操作する必要があります。
編集: 最後になりましたが、has_next は、より高い別の project_id がある場合にのみ true を返すように見えます。そのため、番号が最も大きいプロジェクトに移動すると、has_next は false を返し、右矢印は表示されません。しかし、まだ has_previous をまったく機能させることができません。