Python 获取类';s方法在类本身之外返回

Python 获取类';s方法在类本身之外返回,python,django,Python,Django,我是Python新手,所以请给出可能的详细解释。 所以,我有一段代码,通过ajax在/query上发布表单,然后在服务器上获取数据,返回以在模板/搜索上显示: views.py class SomeClass(View): def post(self, request, *args, **kwargs): if request.method =='POST': data = request.body qd = QueryDict(data

我是Python新手,所以请给出可能的详细解释。 所以,我有一段代码,通过ajax在/query上发布表单,然后在服务器上获取数据,返回以在模板/搜索上显示:

views.py

class SomeClass(View):

     def post(self, request, *args, **kwargs):
       if request.method =='POST':
        data = request.body
        qd = QueryDict(data)
        place = qd.values()[2]
        indate = qd.values()[3]
        outdate = qd.values()[0]
        url = ('http://)
        req = requests.get(url).text
        json_data = json.loads(req)
        self.results = []
        for result in json_data.get('hotelList'):
            self.results.append(result)

     return HttpResponse(self.results)


def function(request):

    var = SomeClass()
    v = var.results

    return render(request,'search.html', {'v':v})
search.html

 <body>
  <form id="form" action="" method="post">{% csrf_token %}>
   <div class="form-group">
    <label for="place">Place</label>
     <input type="text" class="form-control" id="place" placeholder="Input city name">
   </div>
   <div class="form-group">
    <label for="check-in">check-in date</label>
     <input type="text" class="form-control" id="check-in"  placeholder="check-in date">
   </div>
    <div class="form-group">
     <label for="check-out">check-out date</label>
     <input type="text" class="form-control" id="check-out" placeholder="check-out date">
   </div>
<button type="submit" class="btn btn-default" id="submit- btn">Submit</button>{% csrf_token %}
 </form>
<div id="result">
 {% for result in v %}
   {{ result }}
  {% endfor %}
</div>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script>

 <script type="text/javascript">

   $(document).ready(function(){
    // posting form using ajaxForm
    $('#submit-btn').click(function(e) {
        var options = {
           type: "POST",
           target:     '#result', // div to update
           url:        '/query/',
            data: {
            place: $("#place").val(),
            check_in: $("#check-in").val(),
            check_out: $("#check-out").val()

            },
           success:    function() {
              alert('');

        }

  </script>
 </body>
如果我只返回
self.result
,我会得到:

AttributeError:`list'对象没有属性'get'`
所以我使用了
HttpResponse


我需要在我的
函数中接收
结果
。我怎样才能得到它

我认为您的示例代码不是很清楚。因此,我将尝试回答实际问题

基本上,类方法只是对类实例进行操作的函数,作为隐式参数传入,通常称为“self”

这将产生:

['I am a str in a list']
>>>

在这种情况下,甚至没有使用“self”,因此它可能只是一个普通函数。这就是为什么您经常将普通函数视为请求处理程序。如果需要在方法调用之间保留一些状态,并且可以在调用之间保持实例的活动性,则通常需要类

我认为您的示例代码不是很清楚。因此,我将尝试回答实际问题

基本上,类方法只是对类实例进行操作的函数,作为隐式参数传入,通常称为“self”

这将产生:

['I am a str in a list']
>>>

在这种情况下,甚至没有使用“self”,因此它可能只是一个普通函数。这就是为什么您经常将普通函数视为请求处理程序。如果需要在方法调用之间保留一些状态,并且可以在调用之间保持实例的活动性,则通常需要类

您需要将结果添加到返回的上下文中;要做到这一点,请使用
获取上下文数据
,可从

要显示模板,请使用

这完全消除了对单独视图方法的需要

class SomeView(View, ContextMixin, TemplateResponseMixin):
    template_name = 'search.html'

    def get_context_data(self, **kwargs):
        ctx = super(SomeView, self).get_context_data(**kwargs)
        ctx['v'] = self.result
        return ctx

    def post(self, *args, **kwargs):
        self.result = []
        for data in json_data.get('somedata'):
            self.result.append(data)
我真的不明白你为什么要在这里使用基于类的视图,你的代码会简单得多:

def function(request):
    result = []

    if request.POST:
       json_data = json.loads(request.POST['some_field'])
       result = list(json_data['somedata'])

    return render(request, 'search.html', {'v': result})

您需要将结果添加到要返回的上下文中;要做到这一点,请使用
获取上下文数据
,可从

要显示模板,请使用

这完全消除了对单独视图方法的需要

class SomeView(View, ContextMixin, TemplateResponseMixin):
    template_name = 'search.html'

    def get_context_data(self, **kwargs):
        ctx = super(SomeView, self).get_context_data(**kwargs)
        ctx['v'] = self.result
        return ctx

    def post(self, *args, **kwargs):
        self.result = []
        for data in json_data.get('somedata'):
            self.result.append(data)
我真的不明白你为什么要在这里使用基于类的视图,你的代码会简单得多:

def function(request):
    result = []

    if request.POST:
       json_data = json.loads(request.POST['some_field'])
       result = list(json_data['somedata'])

    return render(request, 'search.html', {'v': result})


你为什么要这么做?是否尝试从基于函数的视图访问基于类的视图?我很确定这不是实现您所追求的目标的正确方法。对于我来说,无论我是从基于函数的视图还是从其他类访问它。主要的问题是如何使用课后返回?也许我在概念上是错的,所以请纠正我。如果你解释一下你想要实现什么,我们可以推测更多,但你目前的方法显然是错误的。回答你的问题
result
由方法
post
返回,理论上可以使用
v=var.post(request)
访问它。但是,
post
方法可能需要额外的参数(
*args
**kwargs
)来计算
结果。谢谢,但是如果我跟随你
v=var.post(request)`I get
'SomeClass'对象没有属性'result'。我还能做什么?你不应该在课堂上使用
result
而不是
self.result
吗?你为什么要这么做?是否尝试从基于函数的视图访问基于类的视图?我很确定这不是实现您所追求的目标的正确方法。对于我来说,无论我是从基于函数的视图还是从其他类访问它。主要的问题是如何使用课后返回?也许我在概念上是错的,所以请纠正我。如果你解释一下你想要实现什么,我们可以推测更多,但你目前的方法显然是错误的。回答你的问题
result
由方法
post
返回,理论上可以使用
v=var.post(request)
访问它。但是,
post
方法可能需要额外的参数(
*args
**kwargs
)来计算
结果。谢谢,但是如果我跟随你
v=var.post(request)`I get
'SomeClass'对象没有属性'result'。我还能做什么?你不应该在类中使用
result
而不是
self.result
?为什么要使用
some_方法(None)
参数?作为
请求的占位符,因为示例方法实际上没有使用它。为什么?
post
方法检查第一行中的
request.method
。为什么要使用
some\u method(None)
参数?作为
请求的占位符,因为示例方法实际上没有使用它。为什么?
post
方法检查第一行中的
request.method
。谢谢,但我如何在基于函数的视图中使用
ctx
?非常感谢您的详细回答,但我将代码划分为不同视图的原因是,我对一个url使用ajax post,然后需要对其他url使用呈现页面。因此,我有两个my urls.py中的不同url。如何使它完全符合我的情况?我认为你应该编辑你的问题并详细解释你的问题。谢谢你,但我如何在基于函数的视图中使用
ctx
?非常感谢你的详细回答,但我将代码划分为不同视图的原因是,我有一个url的ajax帖子,然后我需要呈现页面所以我在我的url.py中有两个不同的url。我认为你应该编辑你的问题,详细解释你的问题。