ValueError - 视图没有返回 HttpResponse 对象。它返回 None 而不是

Posted

技术标签:

【中文标题】ValueError - 视图没有返回 HttpResponse 对象。它返回 None 而不是【英文标题】:ValueError - The view didn't return an HttpResponse object. It returned None instead 【发布时间】:2021-06-02 11:37:25 【问题描述】:

我的视图当前返回错误

视图 viajecenter.views.receive_payment 没有返回 HttpResponse 对象。它返回 None 。

我在这里尝试了其他相关帖子中的一些解决方案,但没有成功。

这是我的 views.py 文件中的函数:

def receive_payment(request, account_code):
template_name = 'receive-payment.html'

user = request.user

account = get_object_or_404(Account, account_code=account_code)
if user.is_assigned:
    puv = Puv.objects.get(assignment_id=user.assignment_id)
    locations = puv.route.locations.all().order_by('distance_from_base')

    context = 
        'account': account,
        'puv': puv,
        'locations': locations,
    
    return render(request, template_name, context)

else:
    return user

以及urls.py文件中对应的url:

from django.urls import path
from . views import ..., receive_payment


urlpatterns = [
    ...
    path('receive-payment/<str:account_code>', receive_payment, name="receive-payment"),
]

和我的帐户模型

class Account(AbstractBaseUser, PermissionsMixin):
    ...
    account_code = models.UUIDField(default=uuid.uuid4, editable=False)
    is_assigned = models.BooleanField(default=False)

感谢您抽出时间回答我的问题 :)

【问题讨论】:

你的代码没有意义。 get_context_data 仅适用于基于类的视图,而不是像您当前的 receive_payment 这样的基于函数的视图。 另外,我想我在您之前的 question? 中向您解释了这一点? 我的错,对不起。 @AbdulAzizBarkat 确实在我的另一篇文章中更正了我的格式。我已经编辑了我的帖子,希望它更有意义:) 【参考方案1】:

您似乎正在尝试混合和匹配基于函数的视图和基于类的视图。

您可以将视图重写为DetailView class-based view,如下所示:

from django.views.generic import DetailView


class ReceivePaymentView(DetailView):
    template_name = "receive-payment.html"
    model = Account
    slug_url_kwarg = "account_code"
    slug_field = "account_code"

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        account = context["object"]
        user = self.request.user
        if user.is_assigned:
            puv = Puv.objects.get(assignment_id=user.assignment_id)
            locations = puv.route.locations.all().order_by("distance_from_base")
            context["account"] = account
            context["puv"] = puv
            context["locations"] = locations
        return context
urlpatterns = [
    path('receive-payment/<account_code>', ReceivePaymentView.as_view(), name="receive-payment"),
]

【讨论】:

我已经尝试过了,它返回 ['“account_code=63bb534b-042e-4ffb-8865-3de5b782d9a3” is not a valid UUID.']。我忘记在我的原始帖子中指出“account_code”是一个 UUIDField。 成功了!我只是在路径中将 更改为 。谢谢!

以上是关于ValueError - 视图没有返回 HttpResponse 对象。它返回 None 而不是的主要内容,如果未能解决你的问题,请参考以下文章

Django ValueError 视图 todo_lists.views.visualisation 没有返回 HttpResponse 对象。它返回 None 而不是

/change-password/ 处的 ValueError 视图 authapp.views.ChangePassword 未返回 HttpResponse 对象。它返回 None 而不是

Django_04_视图

Django-视图层

Tensorflow:实现新的损失函数返回“ValueError:没有为任何变量提供梯度”

如何确定“ValueError:元素不能位于父视图中”的原因? - Odoo 10.0e企业