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
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” 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.