Сделайте вызов API api функцией. попробуйте это:
constructor() {
super();
this.state = {
meme: {},
num: 6
};
}
componentDidMount() {
fetchFromAPI(this.state.num);
}
let fetchFromAPI = (num)=>{
this.APIURL = `http://meme.com/${num}`;
fetch(this.APIURL)
.then(resp => resp.json())
.then(data => {
console.log(data);
if (data) {
this.setState({
meme: data
});
}
console.log(this.state.meme);
});
}
nextPic = () => {
if (this.state.num > this.state.meme.totalMemes) {
this.setState({
num: 1
});
} else {
this.setState({
num: this.state.num + 1
});
console.log(this.state.num);
}
fetchFromAPI(this.state.num);
};
render() {
return (
<div>
<h1>{this.state.meme.title}</h1>
<img key={this.state.num} src={this.state.meme.encodedurl} />
<button onClick={this.nextPic}>Next</button>
</div>
);
}
Я не проверял это, но похоже, что это будет работать.
Во-первых, почему Вы не использующий Django ORM для этого?
MyClass.objects.filter( aField__contains=var1, secondField__exact=var2 )
Во-вторых, убедитесь, что Вы получаете SQL, который Вы ожидаете.
stmt= "select... afield like '%%%s%%' and secondfield = '%s'..." % ( var1, var2 )
print stmt
cursor.execute( stmt )
В-третьих, Ваш метод имеет дыру в системе безопасности, названную Атакой с использованием кода на SQL. Вы действительно не должны делать SQL как это.
Если абсолютно необходимо сделать вещи вне ORM Django, необходимо использовать, связывают переменные в запросе, не представляют замену в виде строки. См. http://docs.djangoproject.com/en/dev/topics/db/sql/#performing-raw-sql-queries.
можно ли взломать строку '%' в строку поиска?
var1 = '%' + var1 + '%'
then query normally:
cursor.execute("select col1, col2
from my_tablem where afield like %s
and secondfield = %s
order by 1 desc " , [var1, var2] )