Nedumerire in privinta Python/Flask

Salutare! Dorind sa invat Python 3 si Flask, am inceput sa fac un proiect propriu, intentionand sa dezvolt un mic site de stiri/blog. Problema e la urmatorul script:

@app.route('/<article_title>', methods=['GET', 'POST'])

def read_article(article_title):
	article = Article.query.filter_by(title=article_title).first()
	comments = Comment.query.filter_by(article_id=article.id)
	print('Article:', article.id) #creat temporar pt a ma ajuta
	form = CommentForm()
	if form.validate_on_submit():
		article = Article.query.filter_by(title=article_title).first()
		comment = Comment(text=form.text.data, author=current_user.id, article_id=article.id)
		db.session.add(comment)
		db.session.commit()
	return render_template('read_article.html', article=article, user=current_user, form=form, comments=comments) 

Query-ul de la article e ok, doar ca (asta e intrebarea) nu stiu de ce codul e parcurs inca o data in mod automat, moment in care ‘article’ apare fara continut/NoneType, de unde rezulta o eroare Link eroare. Poate sa ma ajute cineva cu o idee despre ce se intampla? Multumesc!

Nu am lucrat cu Django, dar poti sa incerci urmatoarele lucruri:

  • Pune un breakpoint sa vezi ce valori au variabilele prin program.
  • Daca ai optinuea de Evaluate expression foloseste-o ca sa evaluezi linia de cod si sa vezi rezultatul. Daca folosesti Pycharm, vezi aici cum se face
  • Dat fiind natura inhterpretata a limbajului Python, poti sa vezi chiar la console ce valori au acele variabie si sa executi liniile cu copu paste in console
  • Eroarea zice ca article este none type, deci nu are cum sa aibe propietatea id. Daca none type este echivalentul lui null in alte limbaje (Java, C#, PHP)
  • Nu am idee cum lucreaza ORM-ul din spate, deci poate tine si de aceste lucruri (inchide sesiunea la baza de date etc)

Si in general cand ceri ajutor prin comunitati online acorda 2 minute ghidului

1 Like

Folosesc Flask, nu Django. Initial, query-ul pt variabila ‘article’ se comporta ok, iar article.id se printeaza (se vede in filmare: Article: 1), deci article are acea proprietate, pt ca asa e creat modelul. Abia dupa ce variabila e folosita de template-ul html, codul mai e parcurs inca o data in mod automat (aici nu inteleg logica), dar query-ul nu mai are loc, si rezulta un NoneType.

A doua rulare e de la “/favicon.ico” :slight_smile: Browserul automat face un request sa ceara faviconul si flask crede ca tu ceri tot ceva pe ruta “/<article_title>”, cu article_title = “favicon.ico”. Nu este asemenea articol in db, si atunci variabila article e None.

6 Likes

Asa e! Problema de incepator! Multumesc!