【问题标题】:Django run def index(reuqest) in other def without duplication of codeDjango在其他def中运行def index(request)而不重复代码
【发布时间】:2017-07-06 09:16:46
【问题描述】:

在我的 view.py 中,我有一个 def index(request): 和 def other(request):

在 def other(request): 我想运行完全相同的代码,例如 def index(request): if request.method == 'POST': and else do something different

将代码从 def index(request): 复制到 def other(request): after if request.method == 'POST': 有效,但重复代码不好。如果我在 if 语句之后执行 index(request),则 def other(request): return nothing.

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

@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')

【问题讨论】:

  • 你能给我们看看代码吗?

标签: django view


【解决方案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,...

【讨论】:

  • ty,我忘记退货了 :)
猜你喜欢
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多