在我的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')
答案 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,...