2013-07-15 101 views
1

這是我的other question關於如何在應用程序(Userena)視圖中包含附加查詢集(使用請求)的延續。如果我做什麼@limelights建議,這是我的代碼如下所示:Django:通過請求將Queryset添加到應用程序視圖

觀點:

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'來包含模板名稱和位置,則會呈現正確的模板,但現在缺少一些上下文,就像通常在默認使用區域中呈現的用戶信息「 profile_detail「模板。

如何向Userena個人資料詳細信息視圖添加額外的查詢集,以允許請求以便我可以根據登錄用戶過濾對象?感謝您的想法!

+0

嘿!如果您遇到這種方法的很多問題,我會建議將視圖函數重寫爲適當的函數,因爲我認爲這是最好的! :)當我明天回家時,我會幫你解決,如果別人還沒有! :) –

+0

謝謝@limelights。我非常感謝幫助! –

回答

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) 
相關問題