Django在其他def中运行def index(reuqest)而不重复代码

时间:2017-07-06 09:16:47

标签: django view

在我的view.py中我有一个def索引(请求):和def其他(请求):

在def其他(请求)中:我想运行完全相同的代码,如def index(request):if request.method =='POST':,否则做一些不同的事情

从def索引(请求)复制代码:到def其他(请求):如果request.method =='POST'之后:工作但重复代码不好。如果我在if语句之后执行索引(请求),则def其他(请求):不返回任何内容。

实现这一目标的正确方法是什么?

@login_required
def other(request):
    if request.method == 'POST':
        # do the same like in def index(request):
        index(request)
    else:
        # do somthing different
        pass
    return render(request, 'search/index.html')


@login_required
def index(request):
    if request.method == 'POST':
        form = SearchForm(request.POST)
        if form.is_valid():
            # do something
            pass
    return render(request, 'search/index.html')

1 个答案:

答案 0 :(得分:1)

您可以使用重定向功能重定向到索引功能。 让你的url.py文件包含类似

的内容
url(r'^index/$', 'app.views.index', name='index'),

然后您可以将其他视图重定向到索引,如

from django.http import HttpResponse 
from django.shortcuts import redirect
from django.urls import reverse

def index(request, *args, **kwargs):
    # your index code
    return HttpResponse(result)


def other(request, *args, **kwargs):
    if request.method == 'POST':
        return redirect(reverse('index', args=args, kwargs=kwargs))
    else:
        # else code for GET, PUT,...

如果您不想重定向,请按照以下代码

def index(request, *args, **kwargs):
    # your index code
    return HttpResponse(result)


def other(request, *args, **kwargs):
    if request.method == 'POST':
        return index(request, *args, **kwargs)
    else:
        # else code for GET, PUT,...