اذهب إلى المحتوى

السؤال

نشر

في فلاسك يمكنني تمرير بيانات قالب بالشكل التالي:

render_template("hello.html", messages={'title':'hello world'})

ويمكنني إستخدام هذه البيانات في القالب نفسه من خلال الكود التالي ليتم عرض كلمة hello:

{{ messages['title'] }}

لكن ماذا إذا كان هناك مسار يؤدي إلى عرض نفس القالب:

@app.route("/hello")
def hello():
    # هنا يتم تنفيذ بعض الأكود
    return render_template("hello.html")

إذا أردت أن يتم تنفيذ نفس الأكواد كما في المثال السابق فيجب أن أستعمل الدالة redirect:

return redirect("/hello", messages={"title":"hello world"})

لكن يبدو أنه لا يمكن إستخدام redirect لتمرير البيانات، حيث يظهر الكود السابق الخطأ التالي:

TypeError: redirect() got an unexpected keyword argument 'messages'

هل توجد طريقة لتمرير البيانات أثناء عمل إعادة توجيه redirect؟

Recommended Posts

  • 1
نشر

تستطيع أن تقوم بتمرير الرسائل بإستخدام معاملات عنوان URL (تسمى URL parameter) بالشكل التالي:

from flask import session, url_for

def foo():
    messages = json.dumps({"title":"hello world"})	# تحويل الكائن إلى نص
    return redirect(url_for('hello', messages=messages))

@app.route('/hello')
def hello():
    messages = request.args['messages']  # لإستعادة الرسائل من الدالة url_for()
    return render_template("hello.html", messages=json.loads(messages))

أو يمكنك أن تستعمل الجلسة session لتخزين قيمة message في cookie ثم إستخراج قيمة message من داخل هذه الـ cookie في الدالة hello بالشكل التالي:

from flask import session, url_for

def foo():
    messages = json.dumps({"title":"hello world"})	# تحويل الكائن إلى نص
    session['messages'] = messages					# تخزينه في الـ session
    return redirect(url_for('hello'))

@app.route('/hello')
def hello():
    messages = session['messages']       # لإستعادة الرسائل من الـ session
    return render_template("hello.html", messages=json.loads(messages))

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...