私はかなり簡単な質問があります。私は、Djangoサイトでいくつかの日付ベースの一般的なビューを作成したいと思いますが、それらのページを改ページしたいと思います。ドキュメンテーションによると、object_listビューにはpageとpaginate_byの引数がありますが、archive_monthビューにはありません。それを行う "正しい"方法は何ですか?Djangoの日付ベースの一般的なビューのページ設定
答えて
日付ベースのジェネリックビューには改ページがありません。レンダリングされた結果を返すので、それらをラッピングすることによってページネーションを追加することはできないようです。
この場合、自分のビューを作成するだけです。ジェネリックビューのコードもチェックアウトできますが、ほとんどの場合、おそらくあなたの場合は不要になるでしょう。
あなたの質問は有効なものであり、コードを見ているので、彼らがなぜクエリーセットの生成を別々の機能として切り離さなかったのだろうか。あなたはそれらを使用して、あなたが望むようにレンダリングすることができます。
まだページ付けされていないテンプレートに渡されたコレクションに対してテンプレートベースのページ付けを行うテンプレートタグを作成しました。次のコードをapp/templatetags/pagify.py
ファイルにコピーします。
from django.template import Library, Node, Variable
from django.core.paginator import Paginator
import settings
register = Library()
class PagifyNode(Node):
def __init__(self, items, page_size, varname):
self.items = Variable(items)
self.page_size = int(page_size)
self.varname = varname
def render(self, context):
pages = Paginator(self.items.resolve(context), self.page_size)
request = context['request']
page_num = int(request.GET.get('page', 1))
context[self.varname] = pages.page(page_num)
return ''
@register.tag
def pagify(parser, token):
"""
Usage:
{% pagify items by page_size as varname %}
"""
bits = token.contents.split()
if len(bits) != 6:
raise TemplateSyntaxError, 'pagify tag takes exactly 5 arguments'
if bits[2] != 'by':
raise TemplateSyntaxError, 'second argument to pagify tag must be "by"'
if bits[4] != 'as':
raise TemplateSyntaxError, 'fourth argument to pagify tag must be "as"'
return PagifyNode(bits[1], bits[3], bits[5])
テンプレート(私たちはアイテムと呼ばれる非ページ分割リストに渡されてきたと仮定)でそれを使用するには:PAGE_SIZE引数(20)のように、可変することができ
{% load pagify %}
{% pagify items by 20 as page %}
{% for item in page %}
{{ item }}
{% endfor %}
よくタグはクエリ文字列内の変数page=5
を自動的に検出します。私はこの昨日と同様の問題に取り組んでいた
{{ page.paginator.num_pages }}
を、そしてI:あなたが今まで(例えば、ページ数のため)ページに属しているページネータで取得する必要がある場合と、あなたは簡単に呼び出すことができます私のために最善の解決策を見つけ、次のように個人的に、すべての日付ベースのページのためのOBJECT_LIST汎用ビューを使用しますが、フィルタクエリセットを渡すことだった:
url(r'^blog/(?P<year>\d{4})/(?P<month>\w{3})/$',
view=path.to.generic_view,
name='archive_month'),
:urls.pyのようなものを読み
import datetime, time
def post_archive_month(request, year, month, page=0, template_name='post_archive_month.html', **kwargs):
# Convert date to numeric format
date = datetime.date(*time.strptime('%s-%s' % (year, month), '%Y-%b')[:3])
return list_detail.object_list(
request,
queryset = Post.objects.filter(publish__year=date.year, publish__date.month).order_by('-publish',),
paginate_by = 5,
page = page,
template_name = template_name,
**kwargs)
これは、他の一般的なビューをハッキングしたり、カスタムビューを作成したりせずに、この問題を回避する最も簡単な方法でした。
+1日付に基づくビューが通過する追加の変数(年、月など)を補うためにextra_contextに追加情報を追加する必要がありますが、 – Soviut
Djangoの日付ベースのジェネリックビューは、ページネーションをサポートしていません。これにはopen ticket from 2006があります。必要に応じて、この機能を実装するために提供されたコードパッチを試すことができます。なぜパッチがまだコードベースに適用されていないのかわかりません。
優れたdjango-paginationアドオンもあります。これは、基本となるビューから完全に独立しています。
- 1. djangoの一般的なCRUDビュー
- 2. djangoのクラスベースの一般的なビューのユースケースは何ですか
- 3. djangoの一般的なビュー - 日付変数の出力形式を正しい形式にする方法
- 4. Djangoでの日付ベースのビューの使い方
- 5. Djangoクラスベースの一般的なビューと認証
- 6. Django一般的なリスト/詳細クラスベースのビュー
- 7. 動的PHPページの一般的なURL
- 8. クラスベースの一般的なビューextra context
- 9. ejb jar xmlの一般的設定
- 10. Django Year/Month一般的なビューを持つアーカイブページ
- 11. Djangoにおける一般的なビュー継承
- 12. Django一般的な詳細ビューと制限オブジェクト
- 13. 一般的なビュー 'archive_year'は空白ページを生成します
- 14. 一般的な日付形式を使用する方法
- 15. 一般的なjquery UIダイアログ・ビューを設計する(backbonejs)
- 16. 一般的なASP.NET MVCモデル、コントローラ、ビュー
- 17. 複数の一般的なQtCreatorプロジェクトのビルド設定を自動的に指定
- 18. Djangoクラスベースの一般的なビュー:名前をインポートできませんTemplateView
- 19. 最も一般的な曜日クエリ
- 20. apacheの一般的な設定は何ですか
- 21. 一般的なメソッドの定義
- 22. Eclipseの一般的な起動/実行設定を設定する
- 23. 一般的な/一般的なAndroid搭載端末のタッチポイント数
- 24. Solr用のJavaで一般的な日付フォーマッタを作成するには?
- 25. SQL ServerとORACLEの日付を比較する一般的なSQL
- 26. sqlalchemy一般的な外部キー(django ORMのような)
- 27. viewControllerの一般的なビュー - コードの再利用性
- 28. Djangoの一般的な関係の問題
- 29. Djangoのアプリと支払いシステム(一般的なクエリ)のヘルプ
- 30. Djangoの多対多の一般的な関係
ええ、それは私が探しているものです。クエリーセットを生成する関数は、日付のパラメータに基づいています。私はそれを持っている場合、私はちょうどobject_listまたはページネーションオブジェクトを使用することができます。今のように、自分の意見を書く必要があると思う。 – Apreche
私はdjangoのジェネリックビュー自身に不満を抱きました。そして、基本的には、ジェネリックビューファクトリタイプのgodメソッドを書いていますので、ここで述べた制限はありません。 – SingleNegationElimination