在 def get_object 中呈现模板而不是 raise raise Http404
Render a template within def get_object instead of raise raise Http404
在 class 视图的 get_object
方法中,如果 if 语句失败,我可以将用户定向到模板而不是返回对象吗?
目前 raise Http404("Some message.")
效果很好但看起来不太好,我想使用我自己的模板。
我正在尝试这样做,但使用模板:
def get_object(self):
product = Product.objects.get(slug=self.kwargs.get('slug'))
if product.deleted == False:
if product.out_of_stock == False:
return product
else:
raise Http404("This product is sold out.")
# return reverse("404-error", kwargs={"error": "sold-out"})
# return render(request, "custom_404.html", {"error": "sold_out"})
else:
raise Http404("This product is no longer available.")
# return reverse("404-error", kwargs={"error": "deleted"})
# return render(request, "custom_404.html", {"error": "deleted"})
我的主要目标是避免得到对象。我知道我可以在 get_context_data
方法中执行 if 语句,但是我不确定包含敏感数据的对象一旦在 get_object
中,用户是否可以通过任何方式访问它,所以我只是想避免在条件失败时完全获取对象并向用户显示模板。
出现404错误时可以使用自己的视图,先创建自定义视图:
观看次数
from django.shortcuts import render
def handler404(request, *args, **kwargs):
return render(request, template_name='custom_404.html', status=404)
现在您需要覆盖默认的 404 视图,将其添加到您的 urls.py
主文件中:
urls.py
handler404 = 'appname.views.handler404' # Replaces appname with the name of the app that contains the custom view
现在您可以简单地引发一个 Http404 异常来显示您的自定义模板(您可以保留您的实际代码)。
在 class 视图的 get_object
方法中,如果 if 语句失败,我可以将用户定向到模板而不是返回对象吗?
目前 raise Http404("Some message.")
效果很好但看起来不太好,我想使用我自己的模板。
我正在尝试这样做,但使用模板:
def get_object(self):
product = Product.objects.get(slug=self.kwargs.get('slug'))
if product.deleted == False:
if product.out_of_stock == False:
return product
else:
raise Http404("This product is sold out.")
# return reverse("404-error", kwargs={"error": "sold-out"})
# return render(request, "custom_404.html", {"error": "sold_out"})
else:
raise Http404("This product is no longer available.")
# return reverse("404-error", kwargs={"error": "deleted"})
# return render(request, "custom_404.html", {"error": "deleted"})
我的主要目标是避免得到对象。我知道我可以在 get_context_data
方法中执行 if 语句,但是我不确定包含敏感数据的对象一旦在 get_object
中,用户是否可以通过任何方式访问它,所以我只是想避免在条件失败时完全获取对象并向用户显示模板。
出现404错误时可以使用自己的视图,先创建自定义视图:
观看次数
from django.shortcuts import render
def handler404(request, *args, **kwargs):
return render(request, template_name='custom_404.html', status=404)
现在您需要覆盖默认的 404 视图,将其添加到您的 urls.py
主文件中:
urls.py
handler404 = 'appname.views.handler404' # Replaces appname with the name of the app that contains the custom view
现在您可以简单地引发一个 Http404 异常来显示您的自定义模板(您可以保留您的实际代码)。