1

这是我关于如何在应用程序(Userena)视图中包含附加查询集(带有请求)的另一个问题的延续。如果我按照@limelights 的建议做,这就是我的代码的样子:

看法:

from django.views.generic import list_detail

def requestuserswampers(request):
     qs = Thing.objects.filter(user=request.user)
     return list_detail.object_list(
                 request,
                 queryset = Thing.objects.all(),
                 template_object_name = 'thing',
                 extra_context = {'swamp_things': qs},
     )

网址:

url(r'^accounts/(?P<username>(?!signout|signup|signin)[\.\w-]+)/$',
       requestuserswampers,
       name='userena_profile_detail'),

这会产生一个TemplateDoesNotExist错误:Template does not exist at myapp/swamp_things.html

template_name = 'userena/profile_detail.html'另一方面,如果我尝试使用 包含模板名称和位置,则会呈现正确的模板,但现在缺少一些上下文,例如通常在默认 userena“profile_detail”模板中呈现的用户信息。

如何向允许请求的 Userena 配置文件详细信息视图添加额外的查询集,以便我可以根据登录用户过滤对象?谢谢你的想法!

4

1 回答 1

0

我没有意识到重写另一个应用程序的视图是公认的做法,认为这与 DRY 原则背道而驰。但是由于我还没有发现另一种方法来实现我需要做的事情,并且因为它在上面的评论中得到了另一位高级用户的认可,所以我继续尝试重写 Userena 视图。只需将我的查询集添加到extra_context

def profile_detail(request, username,
    template_name=userena_settings.USERENA_PROFILE_DETAIL_TEMPLATE,
    extra_context=None, **kwargs):

    user = get_object_or_404(get_user_model(),
                         username__iexact=username)

    profile_model = get_profile_model()
    try:
        profile = user.get_profile()
    except profile_model.DoesNotExist:
        profile = profile_model.objects.create(user=user)

    if not profile.can_view_profile(request.user):
        return HttpResponseForbidden(_("You don't have permission to view this profile."))
    if not extra_context: extra_context = dict()
    extra_context['profile'] = user.get_profile()
    extra_context['hide_email'] = userena_settings.USERENA_HIDE_EMAIL

        #### Added the line below
    extra_context['swamp_things'] = Thing.objects.filter(user=user) 

    return ExtraContextTemplateView.as_view(template_name=template_name,
                                            extra_context=extra_context)(request)
于 2013-07-17T19:01:39.230 回答