Example #1
0
def bible(request, version=KJV, template_name=None,
        template_loader=loader, extra_context=None, context_processors=None,
        template_object_name='bible', mimetype=None):
    """
    Renders a list of books for a given Bible.
    
    @args::
                        
        `version`: The Bible version to be used. You can use either the actual object or a string
        representing the translation attribute (eg: KJV or 'KJV')
    
    """
    if extra_context is None: extra_context = {}
    
    if type(version) in (str, unicode):
        bible = lookup_translation(version)
    else:
        bible = version # Perhaps we were sent a VerseText implementation like the KJV.
    
    bible = bible.bible # The Bible() object implementation.
    
    if not template_name:
        template_name = "bibletext/bible_detail.html"
    t = template_loader.get_template(template_name)
    c = RequestContext(request, {
        template_object_name: bible,
    }, context_processors)
    for key, value in extra_context.items():
        if callable(value):
            c[key] = value()
        else:
            c[key] = value
    return HttpResponse(t.render(c), mimetype=mimetype)
Example #2
0
def chapter(request, book_id, chapter_id, version=KJV, template_name=None,
        template_loader=loader, extra_context=None, context_processors=None,
        template_object_name='verse_list', mimetype=None):
    """
    Renders an entire chapter based on the given book and chapter.
    
    @args::
        
        `book_id`: (int) Pk of the Book to be used.
        
        `chapter_id`: (int) The chapter to render.
        
        `version`: The Bible version to be used. You can use either the actual object or a string
        representing the translation attribute (eg: KJV or 'KJV')
    
    """
    if extra_context is None: extra_context = {}
    
    if not (book_id or chapter_id):
        raise AttributeError("Chapter detail view must be called with a book_id and a chapter.")
    
    if type(version) in (str, unicode):
        bible = lookup_translation(version)
    else:
        bible = version # Perhaps we were sent a VerseText implementation like the KJV.
    
    book_id = int(book_id)
    chapter_id = int(chapter_id)
    
    try:
        chapter = bible.bible[book_id][chapter_id]
        verse_list = bible.objects.filter(book_id=book_id, chapter_id=chapter_id)
    except (IndexError, bible.DoesNotExist):
        raise Http404("Chapter not found in the given book of %s." % bible.translation)
    
    if not template_name:
        template_name = "bibletext/chapter_detail.html"
    t = template_loader.get_template(template_name)
    c = RequestContext(request, {
        template_object_name: verse_list,
        'book': chapter.book,
        'chapter': chapter,
        'bible': bible,
    }, context_processors)
    for key, value in extra_context.items():
        if callable(value):
            c[key] = value()
        else:
            c[key] = value
    return HttpResponse(t.render(c), mimetype=mimetype)
Example #3
0
def verse(request, book_id, chapter_id, verse_id, version=KJV, template_name=None,
        template_loader=loader, extra_context=None, context_processors=None,
        template_object_name='verse', mimetype=None):
    """
    Renders a single verse based on the given book, chapter, and verse.

    @args::

        `book_id`: (int) Pk of the Book to be used.

        `chapter`: (int) The chapter to render.

        `version`: The Bible version to be used.

    """
    if extra_context is None: extra_context = {}

    if not (book_id or chapter_id or verse_id):
        raise AttributeError("Verse detail view must be called with a book_id, chapter_id, and a verse_id.")

    if type(version) in (str, unicode):
        bible = lookup_translation(version)
    else:
        bible = version # Perhaps we were sent a VerseText implementation like the KJV.
    
    verse = get_object_or_404(bible, book_id=book_id, chapter_id=chapter_id, verse_id=verse_id)

    if not template_name:
        template_name = "bibletext/verse_detail.html"
    t = template_loader.get_template(template_name)
    c = RequestContext(request, {
        template_object_name: verse,
        'book': verse.book,
        'chapter': verse.chapter,
        'bible': bible,
    }, context_processors)
    for key, value in extra_context.items():
        if callable(value):
            c[key] = value()
        else:
            c[key] = value
    return HttpResponse(t.render(c), mimetype=mimetype)