示例#1
0
def search(request, keywords=None, sep=' '):
    """ Search for `keywords` in `Page` titles and `contents` """
    if keywords is None:
        keywords = request.GET.get('keywords')
        # prefer GET to POST
        if keywords is None:
            keywords = request.POST.get('keywords')
            if not keywords:
                # no (NOT EVEN A LITTLE BIT!!!!!!!1111!!1) input
                return HttpResponseRedirect(urlreverse(home))
    assert(isinstance(keywords, basestring))
    if not re.match('[a-zA-Z]', keywords):
        return HttpResponseRedirect(urlreverse(home))
    keywords = kewwords.strip().strip(',')
    if not keywords:
        return HttpResponseRedirect(urlreverse(home))

    results = SortedDefaultDict(int)
    keywords = keywords.split(sep)

    for keyword in keywords:
        for obj in Page.filter(title__contains=keyword):
            results[obj] += 5
        for obj in Page.filter(text__contains=keyword):
            results[obj] += obj.text.lower().count(keyword.lower())
    results.sort_by_values(reverse=True)

    return render(settings.TEMPLATE_SEARCH, 'search', parameters={
        'keywords': keywords, 'results': results
    })
示例#2
0
def posts_by_tags(tags=None, tag=None):
    """ Get posts by tag(s) """
    tags = tags or (tag,)
    if tags is None:
        tags = request.GET.get('tags')
        if tags is None:
            raise Http404

    if len(tags) == 1:
        return Page.filter(isblog=True, tags__slug=tags[0])
    else:
        return Page.filter(isblog=True,
                           tags__slug__in=tags).order_by('-creation_time')
示例#3
0
def single_page(request, single):
    """ Display single page having slug `single` or raise 404 """
    page = get_object_or_404(Page.filter(url=single, isblog=False))
    return render(settings.TEMPLATE_PAGE, single, {
        'items' : (page,)
        #'comment_url' : urlreverse('comment', kwargs = {'single' : single}),
    })
示例#4
0
def archive(request, year=None, month=None):
    """
    Display post archive.
    :param year: the year to filter by or `None`
    :param month: the month to filter by (requires `year` set) or `None`
    """
    posts = Page.filter(isblog=True)

    if year is None:
        years = {}
        for post in posts:
            _year = years.setdefault(post.creation_time.year,
                                     Year(post.creation_time.year))
            _year.add_month(post.creation_time.month)
        return render(settings.TEMPLATE_OVERVIEW_ARCHIVE, 'archive', {
            'years' : sorted(years.values(), reverse=True),
        })
    else:
        year = int(year)
    if month is not None:
        month = int(month)

    years = set([p.creation_time.year for p in posts])
    posts = posts.filter(creation_time__year=year)
    months = None
    if month:
        months = set([p.creation_time.month for p in posts])
        posts = posts.filter(creation_time__month=month)
    return render(settings.TEMPLATE_ARCHIVE, 'archive', {
        'items' : posts,
        'year' : year,
        'years' : years,
        'month' : month or '',
        'months' : months,
    })
示例#5
0
def popular_pages(request, isblog=False):
    """
    Display popular pages.
    :param isblog: `True` if only blog entries should be displayed
    """
    template = isblog and settings.TEMPLATE_BLOG or settings.TEMPLATE_PAGE
    return render(template, None, {
        'items' : Page.filter(isblog=isblog, popular=True),
        'isblog': isblog,
    })
示例#6
0
def blog_pages(request, page=1, home=False):
    """
        Display blog entries using pagination.
        @param page: the current page's index
        @param home: (template-specific) `True` if using this for
                     displaying the "home" site.
    """
    posts = Page.filter(isblog=True).order_by('-creation_time')
    return render(settings.TEMPLATE_BLOG, ('pages', 'home')[home], {
        'items' : posts,
        'home' : home,
    }, True, int(page))
示例#7
0
def all_pages(request):
    """ Display *all* pages """
    return render(settings.TEMPLATE_PAGE, None, {
        'items' : Page.filter(isblog=False).oder_by('-creation_time')
    })
示例#8
0
def title_feed(request):
    return _feed(request, Page.filter(isblog=True), show_content=False,
                 show_summary=False)
示例#9
0
def feed(request):
    return _feed(request, Page.filter(isblog=True))