Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法在视图中的def内返回HttpResponse_Python_Django - Fatal编程技术网

Python 无法在视图中的def内返回HttpResponse

Python 无法在视图中的def内返回HttpResponse,python,django,Python,Django,我似乎无法使我的视图返回HttpResponse对象。我的观点是根据属性选择值调用def。 以下是my views.py代码: def assign_attribute_value(request, id_item_type): """ """ def integer_attr(item_type): form = forms.AssignIntegerTypeForm() if request.method == "POST":

我似乎无法使我的视图返回HttpResponse对象。我的观点是根据属性选择值调用def。 以下是my views.py代码:

def assign_attribute_value(request, id_item_type):
    """

    """
    def integer_attr(item_type):
        form = forms.AssignIntegerTypeForm()
        if request.method == "POST":
            form = forms.AssignIntegerTypeForm(request.POST)
            if form.is_valid():
                attr_int = form.cleaned_data['attr_int']
                item_type.attr_int = attr_int
                item_type.save()
                return HttpResponseRedirect('/des/list_item_types/')
            else:
                ctx = {'form':form}
                return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))
        ctx = {'form':form}
        return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))

    def string_attr(item_type):
        form = forms.AssignStringTypeForm()
        if request.method == "POST":
            form = forms.AssignStringTypeForm(request.POST)
            if form.is_valid():
                attr_str = form.cleaned_data['attr_str']
                item_type.attr_str = attr_str
                item_type.save()
                return HttpResponseRedirect('/des/list_item_types/')
            else:
                ctx = {'form':form}
                return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))
        ctx = {'form':form}
        return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))

    def boolean_attr(item_type):
        form = forms.AssignBooleanTypeForm()
        if request.method == "POST":
            form = forms.AssignBooleanTypeForm(request.POST)
            if form.is_valid():
                attr_bool = form.cleaned_data['attr_bool']
                item_type.attr_bool = attr_bool
                item_type.save()
                return HttpResponseRedirect('/des/list_item_types/')
            else:
                ctx = {'form':form}
                return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))
        ctx = {'form':form}
        return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))

    def date_attr(item_type):
        form = forms.AssignDateTypeForm()
        if request.method == "POST":
            form = forms.AssignDateTypeForm(request.POST)
            if form.is_valid():
                attr_date = form.cleaned_data['attr_date']
                item_type.attr_date = attr_date
                item_type.save()
                return HttpResponseRedirect('/des/list_item_types/')
            else:
                ctx = {'form':form}
                return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))
        ctx = {'form':form}
        return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))

    type_func = {0: integer_attr,
                 1: string_attr,
                 2: boolean_attr,
                 3: date_attr,
    }

    item_type = ItemType.objects.get(id=id_item_type)
    type_func[item_type.choice](item_type=item_type)
您的代码:

def assign_attribute_value(request, id_item_type):

    def integer_attr(item_type):
        ...
        return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))

    def string_attr(item_type):
        ...
        return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))

    def boolean_attr(item_type):
        ...
        return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))

    def date_attr(item_type):
        ...
        return render_to_response('des/item_type/assign_attribute_value.html', ctx, context_instance=RequestContext(request))

    type_func = {0: integer_attr,
                 1: string_attr,
                 2: boolean_attr,
                 3: date_attr,
    }

    item_type = ItemType.objects.get(id=id_item_type)

    type_func[item_type.choice](item_type=item_type)
您定义了几个回调,并且正在调用它们,但是您没有从视图返回任何回调返回的呈现响应。这样做:

def assign_attribute_value(request, id_item_type):
    ...
    return type_func[item_type.choice](item_type=item_type)

顺便说一句,我建议您将这些回调放在模块级别,以避免在每次视图调用中编译它们。或者在单独的方法中使用基于类的视图和这些回调。

您忘记了从视图返回值,我想:return type\u func[item\u type.choice]item\u type=item\u type是否有错误?