我是Python的新手,所以请详细解释一下。 所以,我有代码,我通过ajax on / 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>
urls.py
urlpatterns += patterns('task6_API.views',
url(r'^search/$', 'search_page', name='search'),
url(r'^query/$', SomeClass.as_view(), name='search_result'),
)
如果我回复self.result
,我会:
AttributeError: `'list' object has no attribute 'get'`
所以我使用HttpResponse
。
我需要在results
收到function
。我怎么才能得到它?
答案 0 :(得分:0)
我认为你的示例代码并不是很清楚。所以我一般会尝试回答实际问题。
基本上,类方法只是一个对类实例进行操作的函数,作为通常名为“self”的隐式参数传入。
class SomeClass:
def some_method(self, request):
# do something with request
return ["I am a str in a list"]
instance = SomeClass()
# Call method on instance. It gets whatever the method returns.
val = instance.some_method(None)
print(val)
这会产生:
['I am a str in a list']
>>>
在这种情况下,“self”甚至没有被使用,所以它可能只是一个普通的功能。这就是您经常将普通函数视为请求处理程序的原因。如果需要在方法调用之间保留一些状态,并且可以在调用之间保持实例处于活动状态,则通常需要类。
答案 1 :(得分:0)
您需要将结果添加到您要返回的上下文中;为此,请使用中提供的get_context_data
。
要显示模板,请使用ContextMixin
。
这完全消除了对单独视图方法的需求。
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})