【问题标题】:local variable 'user' referenced before assignment error分配错误之前引用的局部变量“用户”
【发布时间】:2017-06-18 20:50:04
【问题描述】:

我不断收到错误“分配前引用的局部变量'用户'”。我正在尝试在此函数中复制 user = 代码行:

def profile_view(request, username):
    user = get_object_or_404(User, username=username)

使用此功能,您可以在最后一行看到:

def like_user(request, id):
    pending_like = get_object_or_404(User, id=id)
    user_like, created = UserLike.objects.get_or_create(user=request.user)
    user = get_object_or_404(User, username=user.username)

但是,由于我没有将用户名传递到函数中,所以我尝试使用 user.username 但我收到错误“在分配之前引用了局部变量'用户'”。解决这个问题的最好方法是什么?我做错了吗?我应该尝试传递用户名吗,因为当我这样做时,我收到错误“like_user() 恰好需要 3 个参数(给定 2 个)”。对不起,对 django 很陌生,任何帮助将不胜感激!

谢谢

【问题讨论】:

  • 但这根本没有任何意义。您还没有获取用户,那么如何使用其用户名来执行获取该用户的操作呢?
  • 更不用说,pending_likerequest.user 都是 User 的实例,所以不清楚为什么需要进行另一个查询来获取另一个 User 实例。
  • 您好,抱歉,让我创建一个新帖子并将其余代码放入其中。

标签: python django


【解决方案1】:

尝试request.user.username 而不是user.username
它应该工作

【讨论】:

  • 嗨,问题是用户是指除了request.user之外的所有其他用户,我希望这是有道理的
  • 即使它确实有效,这将是完全没有意义的,因为它只会得到与你已经拥有的 request.user 完全相同的实例。
【解决方案2】:
def profile_view(request, username):
    user = get_object_or_404(User, username=username)

如果这是一个查看功能并且您的意图是查看其他人的个人资料,那么您必须在 urls.py 中进行更改:

urlpatterns = [
    url(r'^profile/(?P<username>[\w]+)$', profile_view), 
    # you have to pass the parameter in the url
]

否则很难理解你想做什么

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    相关资源
    最近更新 更多