>
플라스크를 사용할 때 Javascript 파일에서 동적 URL을 만드는 권장 방법은 무엇입니까? jinja2 템플릿과 python 뷰 내에서 url_for   .js 에서 권장되는 방법은 무엇입니까?  파일? 템플릿 엔진에서 해석되지 않기 때문에

기본적으로하고 싶은 것은 :

// in comments.js
$.post(url_for('comment.comment_reply'));

어떤 것이 불가능합니다.

하지만 당연히 템플릿에서 실행할 수 있습니다 :

<script>
    $.post(url_for('comment.comment_reply'));
</script>


  • 답변 # 1

    @dumbmatter의 제안은 사실상 표준적인 방법으로 간주됩니다. 그러나 나는 그것을하는 더 좋은 방법이있을 것이라고 생각했습니다. Flask-JSGlue라는 플러그인을 개발했습니다.

    {{ JSGlue.include() }} 를 추가 한 후 소스 코드에서 다음을 수행 할 수 있습니다.

    <script>
        $.post(Flask.url_for('comment.comment_reply', {article_id: 3}));
    </script>
    
    

    또는 :

    <script>
        location.href = Flask.url_for('index', {});
    </script>
    
    

  • 답변 # 2

    Flask 설명서는 url_for 사용을 제안합니다  HTML 파일에서 다른 곳에 액세스 할 수있는 루트 URL을 포함하는 변수를 설정하십시오. 그런 다음 루트 URL과 비슷한 뷰 URL을 저장할 수 있지만 그 위에 뷰 URL을 수동으로 작성해야합니다.

  • 답변 # 3

    @jeremy의 답변이 정확하고 더 일반적인 접근 방식이지만 대안으로, dantezhu  의견에 제안 된 정확한 URL-route-map-to-javascript 번역을 수행한다고 주장하는 플라스크 확장 프로그램을 작성하고 게시했습니다.

  • 답변 # 4

    이 더럽고 추악한 트릭을 사용합니다.

    "{{url_for('mypage', name=metadata.name,scale=93,group=2)}}"
    .replace('93/group',scale+'/group')
    
    

    여기서 scale  AJAX 요청에 사용하려는 자바 스크립트 변수입니다. 따라서 url_for는 URL을 생성하고 JavaScript는 런타임시 매개 변수를 대체합니다. 생성 된 코드는 다음과 같습니다.

    "/ajaxservive/mynam/scale/93/group/2".replace('93/group',scale+'/group')
    
    

    이것은 꽤 이상하지만 여전히 더 우아한 해결책을 찾을 수 없습니다.

    실제로 연결된 플라스크 확장 코드를 보면 일반적인 경우를 관리하지만 동일한 작업을 수행합니다.

  • 답변 # 5

    솔루션을 검색 할 때이 솔루션을 찾을 수 있습니다.

    추가 기능이 필요하지 않습니다

    하드 코딩 URL 없음

    핵심은 Jinja2 를 실현하는 것입니다  즉시 자바 스크립트를 렌더링 할 수 있습니다.

    <시간>

    템플릿 폴더를 아래와 같이 설정하십시오 :

    /template
        /html
            /index.html
        /js
            /index.js
    
    
    <시간>

    views.py에서

    @app.route("/index_js")
    def index_js():
        render_template("/js/index.js")
    
    
    <시간>

    이제 정적 폴더에서 자바 스크립트를 제공하는 대신. 다음을 사용합니다 :

    <script src="{{ url_for('index_js') }}"></script>
    
    

    결국 자바 스크립트를 생성하는 중입니다. 더 이상 정적 파일이 아닙니다.

    <시간>

    이제 자바 스크립트 파일 안에 간단히 url_for 를 사용하십시오.  당신이 어떤 html 에서와 같이  파일.

    예 : Jquery 사용  Ajax 요청하기

    $.ajax({
      url: {{ url_for('endpoint_to_resource') }},
      method: "GET",
      success: call_back()
    })
    
    

  • 이전 wpf - 함께 일하는 디자이너와 개발자
  • 다음 c# - 자동화 된 단위 테스트 - 왜? 뭐? 어느?