Это пример кода из одного из моих проектов, где я измеряю текстовое представление. Вы бы измерили TableRow
TextView filter = findViewById(R.id.list_filter);
filter.measure(0, 0);
int center = filter.getLeft() + filter.getMeasuredWidth()/2;
Point p = new ViewTarget(filter).getPoint();
Log.i(TAG, "x: " + p.x
+ " width: " + filter.getWidth()
+ " right: " + filter.getRight()
+ " left: " + filter.getLeft()
+ " measured: " + filter.getMeasuredWidth()
);
Log.i(TAG, "value: " + (0- filter.getLeft() - filter.getMeasuredWidth()));
Дата базировалась, универсальные представления не имеют разбиения на страницы. Кажется, что Вы не можете добавить разбиение на страницы через обертывание их также, так как они возвращают представленный результат.
Я просто записал бы свое собственное представление в этом случае. Можно проверить код универсальных представлений также, но большая часть из него, вероятно, будет ненужной в случае.
Так как Вашим вопросом является допустимый и рассмотрение кода; интересно, почему они не отделяли queryset поколение как отдельные функции. Вы могли просто использовать их и представить, как Вы желаете затем.
Я вчера работал над проблемой, похожей на эту, и я нашел лучшее решение для себя лично - использовать общее представление object_list для всех страниц на основе даты, но передать отфильтрованный набор запросов, следующим образом:
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)
Где urls.py читается примерно так:
url(r'^blog/(?P<year>\d{4})/(?P<month>\w{3})/$',
view=path.to.generic_view,
name='archive_month'),
Я нашел, что это самый простой способ решить проблему, не прибегая к взлому других общих представлений или написанию пользовательского представления.
Я создал тег шаблона для разбивки на страницы на основе шаблонов коллекций, переданных в шаблоны, которые еще не разбиты на страницы. Скопируйте следующий код в файл 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])
Чтобы использовать его в шаблонах (предположим, мы передали список без разбивки на страницы с именем items ):
{% load pagify %}
{% pagify items by 20 as page %}
{% for item in page %}
{{ item }}
{% endfor %}
Аргумент page_size (20) также может быть переменной. Тег автоматически обнаруживает page = 5
переменных в строке запроса. И если вам когда-нибудь понадобится перейти к пагинатору, принадлежащему странице (например, для подсчета страниц), вы можете просто позвонить:
{{ page.paginator.num_pages }}
Общие представления Django на основе даты не поддерживают разбиение на страницы. На это есть открытый билет 2006 года . Если вы хотите, вы можете попробовать патчи кода, предоставленные для реализации этой функции. Я не уверен, почему исправления еще не были применены к кодовой базе.
Существует также отличное дополнение django-pagination , которое полностью не зависит от основного представления.