url_for ()를 사용하여 Flask에서 동적 URL 만들기


183

내 플라스크 노선의 절반은 변수 말을 필요로 /<variable>/add하거나 /<variable>/remove. 해당 위치에 대한 링크를 작성하는 방법

url_for() 함수가 전달할 인수를 하나만 사용하지만 인수를 추가 할 수 없습니까?

답변:


282

변수에 키워드 인수가 필요합니다.

url_for('add', variable=foo)

12
함수가 def add(variable)?
endolith

5
@endolith, 예. ** 전달 된 kwargs url_for는 Flask의 가변 규칙 경로에 대한 함수 매개 변수로 전달됩니다.
highvolt

3
그러나 문제는 'foo'가 Python의 변수 인 경우 범위를 벗어나는 방법입니다. 그렇다면 어떻게 해결합니까?

1
더 명확하게하기 위해, 기능 이 @app.route("/<a>/<b>")있고 def function(a,b): ...기능 이 있다면 url_for키워드 인수를 다음과 같이 사용 하고 지정 해야합니다 .url_for('function', a='somevalue', b='anothervalue')
jarrettyeo

120

url_forin Flask는 템플릿을 포함하여 응용 프로그램 전체에서 URL을 변경해야하는 오버 헤드를 방지하기 위해 URL을 만드는 데 사용됩니다. 없이url_for 앱의 루트 URL에 변경이있는 경우 링크가있는 모든 페이지에서 변경해야합니다.

통사론: url_for('name of the function of the route','parameters (if required)')

다음과 같이 사용할 수 있습니다.

@app.route('/index')
@app.route('/')
def index():
    return 'you are in the index page'

이제 색인 페이지에 링크가 있으면 다음을 사용할 수 있습니다.

<a href={{ url_for('index') }}>Index</a>

예를 들어 다음과 같이 많은 일을 할 수 있습니다.

@app.route('/questions/<int:question_id>'):    #int has been used as a filter that only integer will be passed in the url otherwise it will give a 404 error
def find_question(question_id):  
    return ('you asked for question{0}'.format(question_id))

위의 경우 다음을 사용할 수 있습니다.

<a href = {{ url_for('find_question' ,question_id=1) }}>Question 1</a>

이와 같이 간단하게 매개 변수를 전달할 수 있습니다!


1
질문이 있습니다. 첫 번째 예제에서는 인덱스 메서드가 문자열로 전달되었지만 두 번째 메서드에서는 find_question이 변수로 전달되었습니다. 왜?
आनंद

1
@AnandTyagi이게 무슨 뜻인가요? URL 라우팅
Tony Chou

3
@ आनंद 변수가 있다면 : {{ url_for('find_question' ,question_id=question.id) }}아닙니다{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-Rahmaan Janhangeer

38

Flask API 문서를 참조하십시오flask.url_for()

js 또는 css를 템플릿에 연결하는 데 사용되는 다른 샘플 스 니펫은 다음과 같습니다.

<script src="{{ url_for('static', filename='jquery.min.js') }}"></script>

<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">

1

템플릿 :

함수 이름과 인수를 전달하십시오.

<a href="{{ url_for('get_blog_post',id = blog.id)}}">{{blog.title}}</a>

보기, 기능

@app.route('/blog/post/<string:id>',methods=['GET'])
def get_blog_post(id):
    return id
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.