示例#1
0
def extension_detail(request, addon):
    """Extensions details page."""
    # If current version is incompatible with this app, redirect.
    comp_apps = addon.compatible_apps
    if comp_apps and request.APP not in comp_apps:
        prefixer = get_url_prefix()
        prefixer.app = comp_apps.keys()[0].short
        return redirect('addons.detail', addon.slug, permanent=True)

    # Popular collections this addon is part of.
    collections = Collection.objects.listed().filter(
        addons=addon, application=request.APP.id)

    ctx = {
        'addon': addon,
        'src': request.GET.get('src', 'dp-btn-primary'),
        'version_src': request.GET.get('src', 'dp-btn-version'),
        'tags': addon.tags.not_denied(),
        'grouped_ratings': GroupedRating.get(addon.id),
        'review_form': RatingForm(),
        'reviews': Rating.without_replies.all().filter(
            addon=addon, is_latest=True).exclude(body=None),
        'get_replies': Rating.get_replies,
        'collections': collections.order_by('-subscribers')[:3],
        'abuse_form': AbuseForm(request=request),
    }

    # details.html just returns the top half of the page for speed. The bottom
    # does a lot more queries we don't want on the initial page load.
    if request.is_ajax():
        # Other add-ons/apps from the same author(s).
        ctx['author_addons'] = addon.authors_other_addons(app=request.APP)[:6]
        return render(request, 'addons/impala/details-more.html', ctx)
    else:
        return render(request, 'addons/impala/details.html', ctx)
示例#2
0
def persona_detail(request, addon):
    """Details page for Personas."""
    if not (addon.is_public() or addon.is_pending()):
        raise http.Http404

    try:
        persona = addon.persona
    except Persona.DoesNotExist:
        raise http.Http404

    # This persona's categories.
    categories = addon.categories.all()
    category_personas = None
    if categories.exists():
        qs = Addon.objects.public().filter(categories=categories[0])
        category_personas = _category_personas(qs, limit=6)

    data = {
        'addon': addon,
        'persona': persona,
        'categories': categories,
        'author_personas': persona.authors_other_addons()[:3],
        'category_personas': category_personas,
    }

    try:
        author = addon.authors.all()[0]
    except IndexError:
        author = None
    else:
        author = author.get_url_path(src='addon-detail')
    data['author_gallery'] = author

    dev_tags, user_tags = addon.tags_partitioned_by_developer
    data.update({
        'dev_tags':
        dev_tags,
        'user_tags':
        user_tags,
        'review_form':
        RatingForm(),
        'reviews':
        Rating.without_replies.all().filter(addon=addon, is_latest=True),
        'get_replies':
        Rating.get_replies,
        'search_cat':
        'themes',
        'abuse_form':
        AbuseForm(request=request),
    })

    return render(request, 'addons/persona_detail.html', data)
示例#3
0
 def test_edit_review_form(self):
     doc = pq(self.render('{{ edit_review_form() }}'))
     assert doc('#review-edit-form').length == 1
     assert doc('p.req').length == 1
     for name in RatingForm().fields.keys():
         assert doc('[name=%s]' % name).length == 1