سؤال

أقوم بتعديل تسجيل الدخول لتطبيق عينة Flaskr ، يحصل السطر الأول على خطأ. لكن www.html موجود في القالب.

return redirect(url_for('www'))
#return redirect(url_for('show_entries'))

عرض خطأ :

werkzeug.routing.BuildError

BuildError: ('www', {}, None) 
هل كانت مفيدة؟

المحلول

return redirect(url_for('www')) هل ستعمل إذا كان لديك وظيفة في مكان آخر مثل هذا:

@app.route('/welcome')
def www():
    return render_template('www.html')

url_for تبحث عن وظيفة ، يمكنك تمريرها اسم من الوظيفة التي تريد الاتصال بها. أعتقد أنه من مثل هذا:

@app.route('/login')
def sign_in():
    for thing in login_routine:
        do_stuff(thing)
    return render_template('sign_in.html')

@app.route('/new-member')
def welcome_page():
    flash('welcome to our new members')
    flash('no cussing, no biting, nothing stronger than gin before breakfast')
    return redirect(url_for('sign_in')) # not 'login', not 'sign_in.html'

يمكنك أيضا أن تفعل return redirect('/some-url'), ، إذا كان ذلك أسهل في تذكره. من الممكن أيضًا أن يكون ما تريده ، بالنظر إلى خطك الأول ، هو فقط return render_template('www.html').

وأيضًا ، ليس من تعليق Shuaiyunancn أدناه ، إذا كنت تستخدم مخططات ، url_for يجب أن يتم الاحتجاج بها url_for('blueprint_name.func_name') لاحظ أنك لا تمر الكائن ، بل السلسلة. انظر الوثائق هنا.

نصائح أخرى

افترض أن def www(): تم تعريفه بالفعل (كما هو مقترح من إجابة Unmounted Awesome) ، يمكن أيضًا إلقاء هذا الخطأ إذا كنت تستخدم مخططًا لم يتم تسجيله.

تأكد من تسجيل هذه عندما app تم إنشاء مثيله الأول. بالنسبة لي تم القيام به مثل هذا:

from project.app.views.my_blueprint import my_blueprint
app = Flask(__name__, template_folder='{}/templates'.format(app_path), static_folder='{}/static'.format(app_path))
app.register_blueprint(my_blueprint)

وداخل my_blueprint.py:

from flask import render_template, Blueprint
from flask_cors import CORS

my_blueprint = Blueprint('my_blueprint', __name__, url_prefix='/my-page')
CORS(my_blueprint)


@metric_retriever.route('/')
def index():
    return render_template('index.html', page_title='My Page!')

صادفت هذا الخطأ

Builderror: ('project_admin' ، {} ، لا شيء)

عندما تلقيت مكالمة مثل

return redirect(url_for('project_admin'))

التي كنت أحاول الإشارة إليها project_admin وظيفة داخل مخطط بلدي. لحل الخطأ ، أضفت نقطة قبل اسم الوظيفة ، مثل هذا:

return redirect(url_for('.project_admin'))

وفويلا ، تم حل مشكلتي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top