Python 获取类';s方法在类本身之外返回
我是Python新手,所以请给出可能的详细解释。 所以,我有一段代码,通过ajax在/query上发布表单,然后在服务器上获取数据,返回以在模板/搜索上显示: views.pyPython 获取类';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
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。我认为你应该编辑你的问题,详细解释你的问题。