مشاركة حلول: تعديل المنشورات

مرحباً جميعاً

المهمة المطلوبة

بإمكانك الإطلاع على المهمة المطلوبة من هنا

لا تنسى تحديث الأكواد في المستودع على GitHub

5 Likes

السلام عليكم أستاذي @YaserAlnajjar الكريم
إليكم محاولتي

1 Like
2 Likes

سلام

اين يجب كتابة هذا الكود

عند فتح الصفحة, يجب عليك تمرير البيانات في دالة render_template بهذا الشكل:

elif request.method == 'GET':
    post = post_store.get_by_id(id)
    return render_template('post-update.html', post=post)
1 Like

هذه محاولتي استاذ ياسر لكن لا يتم التعديل

1 Like

أهلا سارة

وجدت نقطتين من إطلاعي على الأكواد:

@app.route('/posts/update/<int:id>', methods = ['GET', 'POST'])
def post_update(id):
    if request.method == 'POST':
        update_fields = {
            'photo_url': request.form['photo_url'],
            'name': request.form['name'],
            'body': request.form['body']
        }
        post_store.update(id, update_fields)

    return redirect(url_for('home'))

    if request.method == 'GET':
        post = post_store.get_by_id(id)
        print('hi')
        return render_template('post-update.html', post=post)

لاحظي أن السطر return redirect(url_for('home')) ليس مضمن مع الـ if :smile:

يعني الصحيح أن تكتبيه بهذا الشكل:

@app.route('/posts/update/<int:id>', methods = ['GET', 'POST'])
def post_update(id):
    if request.method == 'POST':
        update_fields = {
            'photo_url': request.form['photo_url'],
            'name': request.form['name'],
            'body': request.form['body']
        }
        post_store.update(id, update_fields)

        return redirect(url_for('home'))

    if request.method == 'GET':
        post = post_store.get_by_id(id)
        print('hi')
        return render_template('post-update.html', post=post)

الأمر الثاني هو مجرد خطأ مطبعي بسيط:

<form action="{{  url_for('post_update) }}" method="POST">

لاحظي post_update علامة التنصيص غير مغلقة, المفروض url_for('post_update')

جربي هذه الأمور وأخبريني كيف جرى الأمر :wink:

1 Like

صححت لكن مازال الأمر كما هو

1 Like

نسخت المشروع على pycharm وجربته وظهرت لي هذه الرسالة

لاحظي السطر:

Could not build url for endpoint ‘post_update’. Did you forget to specify values [‘id’]?

والذي يعني أنه بقي أيضاً تمرير الـ id الخاص بالـ post في هذه الدالة:

url_for('post_update')

انتظر حلك :wink:

1 Like

لقد أضفت هذا السطر لكن لم يعمل

 <form action="{{  url_for('post_update', post.id) }}" method="POST">
1 Like

تاكدي من اعادة تشغيل السيرفر لانني جربت الموضوع

1 Like

هل الكود الي كتبتو صحيح
عندما أعدت تشغيل السيرفر ظهر لي الخطا التالي
File “C:\Users\MOUFIDA\PycharmProjects\POSTYTEST\templates\post-update.html”, line 10, in top-level template code

TypeError: url_for() takes 1 positional argument but 2 were given
127.0.0.1 - - [09/Apr/2019 10:58:12] “GET /posts/update/1 HTTP/1.1” 500 -

1 Like

1 Like

يجب ان تقومي بتحديد اسم المتغير الذي سيتم تمريره داخل دالة url_for

id=post.id
1 Like

تقصد هكذا


 <form action="{{  url_for('post_update', id=post.id) }}" method="POST">

1 Like

شكرا استاذ تمت العملية بنجاح

1 Like

استاذ لدي بعض المشاكل أريد منك أن تعمل لي فيديو عن كيفية تسلسل الأوامر والإنتقال بين تنفيذ الأوامؤ من main والى index وخاصة وكيف انادي على الأمر " method="POST" سامحني تعبتك معي

1 Like

بالتاكيد ساقوم باضافة درس حولها :wink:

1 Like
1 Like

عمل رائع كالعادة يا اسماء :+1:

1 Like
1 Like