【发布时间】:2021-04-07 22:54:39
【问题描述】:
删除“博客文章”后,我想返回帐户页面,即 account:view。
但是我遇到了以下错误,告诉我未定义 user_id。这是一个 NameError,如回溯中所示。
我尝试在 account = Account.objects.get(pk=user_id) 上方添加 user_id = kwargs.get("user_id") 行,就像我在 accounts.views.py 中所做的那样
但它最终返回另一个错误。
有人可以建议我应该如何在这个视图中定义 user_id,也许我应该如何在其他视图中定义帐户,以便我正确返回到用户的帐户页面。非常感谢!
追溯:
Traceback (most recent call last):
File "/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/lib/python3.8/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "HomeFeed/views.py", line 147, in delete_blog_view
account = Account.objects.get(pk=user_id)
NameError: name 'user_id' is not defined
在 HomeFeed 应用中: urls.py
app_name = 'HomeFeed'
path('<slug>/delete/', delete_blog_view, name= "delete"),
views.py
@login_required
def delete_blog_view(request,slug):
context = {}
user = request.user
#YOU WANT to check if user is authenticated. if not, you need to authenticate! redirect you to that page
if not user.is_authenticated:
return redirect("must_authenticate")
#querying the accounts from the Account model table
account = Account.objects.get(pk=user_id)
#querying the blog post to be deleted by referencing to the slug
blog_post = get_object_or_404(BlogPost, slug=slug)
#deleting the blog post
blog_post.delete()
#return redirect to the account:view page after the delete
return redirect(request.META.get('HTTP_REFERER', 'account:view', kwargs={'user_id': account.pk }))
在“帐户”应用中:
urls.py:
path('<user_id>/', account_view, name="view"),
views.py
def account_view(request, *args, **kwargs):
context = {}
user_id = kwargs.get("user_id")
try:
account = Account.objects.get(pk=user_id)
except:
return HttpResponse("Something went wrong.")
if account:
context['id'] = account.id
context['username'] = account.username
context['email'] = account.email
context['profile_image'] = account.profile_image.url
context['BASE_URL'] = settings.BASE_URL
return render(request, "account/account.html", context)
models.py:
class Account(AbstractBaseUser):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
def __str__(self):
return self.username
get() 错误的回溯:
Traceback (most recent call last):
File "/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "lib/python3.8/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "HomeFeed/views.py", line 151, in delete_blog_view
return redirect(request.META.get('HTTP_REFERER', 'account:view', kwargs={'user_id': account.pk }))
TypeError: get() takes no keyword arguments
编辑代码:
def delete_blog_view(request,slug):
context = {}
user_id = request.user.id
account = Account.objects.get(pk=user_id)
#account = Account.objects.get(pk=user_id)
blog_post = get_object_or_404(BlogPost, slug=slug)
blog_post.delete()
if request.META.get('HTTP_REFERER') == reverse("HomeFeed:main"):
return redirect(reverse("HomeFeed:main"))
elif request.META.get('HTTP_REFERER') == reverse("HomeFeed:detail", kwargs={'slug': slug }):
return redirect(reverse( 'account:view', kwargs={'user_id': request.user.id }))
else:
return redirect(reverse('HomeFeed:main'))
print(request.META("HTTP_REFERER"))
【问题讨论】:
-
嗨 mugoma,我使用了你的方法并得到了一个类型错误:int() 参数必须是一个字符串、一个类似字节的对象或一个数字,而不是 'SimpleLazyObject'
-
@Mugoma ^^^^^^^
-
发布的代码中没有任何地方使用
int()函数。 -
你可以有
user_id = request.user.id -
我试过这个并得到一个类型错误:get() 没有关键字参数