Django:“str”对象没有属性“user”

2024-10-01 15:42:42 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的视图代码:

@login_required
def get_top(type):
    o = Work.objects.filter(types = "Fan Fiction").order_by("-date_updated")[:10]
    list = []
    for o in o:
        l.title = o.title
        l.href = "/" + o.id
        list.append(l)
    return l

@login_required
def main_home(request):
    fanfiction = get_top("ff")
    poetry = get_top("pw")
    originalwork = get_top("ow")
    return render_to_response("Main/main_home.html", {'STATIC_URL':STATIC_URL, "poetry":poetry, "fan":fanfiction, "original":originalwork})

这是模型的代码:

^{pr2}$

这是错误:'str' object has no attribute 'user'在“get_top(“ff”)”


Tags: 代码homegetpoetryreturntitlemaintop
2条回答

get_top不返回HttpResponse,因此Django无法正确应用@login_required修饰符(假设它返回一个具有.user属性的HttpResponse)

请删除@login_required方法的@login_required装饰器。

它要做的是,@login_required尝试验证该用户是否已登录。这是试图在ff中找到一个User对象实例,它是一个str,因此有stacktrace。通常@login_requiredrequestobj获得{},但是由于您没有在get_top中传递该值,因此出现错误。在

我的建议是您应该在views.py中维护一组方法,这些方法链接到urls.py中的API url,其中有些方法可能需要@login_required。其他一组方法是helper方法(比如get_top)。它们不暴露于外部世界(因此不需要@login_required)。在

如果必须在内部和外部公开get_top,那么{}的第一个参数必须是request对象,然后是其他参数。在

相关问题 更多 >

    热门问题