8

首先,我希望两个视图都使用完全相同的 URL,因为我不想让我的 URLConf 更复杂。我想要 GET 和 POST 的单独视图以使我的代码更清晰。代码是这样的:

def view2 (request):
    # handle POST request, possibly a ajax one
    return HTTPRESPONSE(json_data, mimetype="Application/JSON")

def view1 (request):
    if method == POST:
        view2(request)
        # What should I return here???

    else:
        # handle GET
        return render(request, template, context)

我的问题是关于这# What should I return here???条线的。如果我不在那里退货,则会发生错误:

不返回http响应

但是我已经在 view2 中返回了一个 HTTP 响应。我怎样才能使这项工作?

4

2 回答 2

11

另一种可能更简洁的方法是使用基于类的视图

from django.views.generic import TemplateView

class View1(TemplateView):
    def get(self, request, *args, **kwargs):
        """handle get request here"""

    def post(self, request, *args, **kwargs):
        """handle post request here"""

    def head(self, request, *args, **kwargs):
        """handle head request here. Yes, you can handle any kind of requests, not just get and post"""

当然,您可以添加常用方法__init__(除非您确定自己在做什么,否则这是无用的)、应用login_required(请参阅此 SO 问题)以及您可以使用 django 视图执行的几乎所有操作(例如应用中间件、权限等)python 类(例如继承、元类/装饰器等)

此外,Django 附带了一大堆基于通用类的视图来解决常见情况,如列表页面、详细信息页面、编辑页面等。

于 2013-05-29T19:38:44.890 回答
6

你需要返回view2的结果:

def view1 (request):
    if request.method == 'POST':
        return view2(request)
    else:
        # handle GET
        return render(request, template, context)
于 2013-05-29T18:59:59.240 回答