2015-03-29 22 views
6

javascript dosyalarında jinja şablonuna erişmem gerekiyor (i18n etiketleri nedeniyle). Böylece, bulduğum yol, jin dosyasını jinja yönteminden içerecek şekilde eklemektir. Ancak bu yöntem yalnızca şablonlar klasöründeki dosyaları arayacaktır. Ancak js dosyaları statik klasörde olmalı. Sorum şu ki, jinja'nın dosyalara nasıl baktığını nasıl değiştirebilirim? Şablonlar klasöründe aramak yerine, bu durumda, statik klasörde arama yapın.Javascript dosyalarını jinja ile sabit klasörden içe aktar

{% block javascript %} 
    <script type="text/javascript"> 
     {% include "myscript.js" %} 
    </script> 
{% endblock %} 
+0

sen 'url_for ('[kullanabilirsiniz Statik ', dosya adı =' script.js ') '] (http://flask.pocoo.org/docs/0.10/quickstart/#static-files) Eğer dosyalarınızı ** statik ** dir'e yerleştirirseniz – kartheek

+2

@kartheek Bu durumda kullanışlı olmayan bu kullanıcı, dosyayı – davidism

cevap

4

Bir dosyayı şablon olarak işlemeniz gerekiyorsa, statik değildir. Şablonlar klasörüne koyun ve işleyin. Dosya, değil dinamikse, statiktir. Onu statik klasöre koyun ve ona bağlayın. Belirli bir dosya türü 'un bir şablon veya statik dosya olması gerekliliğine gerek yoktur. Hangisinin gerekli olduğunu seçin. Diğer taraftan, farklı girdilere dayalı olarak farklı kodlar oluşturmak yerine, JS statik ve argümanları ona aktarmak daha iyidir. Eğer uygulama nesnesi oluştururken bu

app/static/css/bootstrap.min.css 
app/static/js/bootstrap.min.js 
app/templates/test_page.html 
app/views 
run_server 

Sen şişesi static_url_path ayarlayabilirsiniz gibi görünen bir örnek dizin yapısı göz önüne alındığında

+0

Hmm şablon olarak değerlendirmek istiyor. Sadece "şablon" klasörünün içinde (dinamik, şablon değiştirilmiş) javascript dosyası olması için bana temiz hissetmiyor, ama muhtemelen gitmenin yolu budur. – lakerz

+0

Bu normal koşullar için iyi bir görüntü olsa da, JS'nin dahil edilmesi gereken zamanlar vardır (örneğin, bir 500 sayfa oluşturma). –

5

app = Flask(__name__, static_url_path='/static') 

ve sonra test_page.html size benzeyen bir şey olabilir Bu

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

I'm an html body 

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

Örneğinizde statik url yolunu ayarlamanıza gerek yoktur, bu varsayılan değerdir. Ayrıca, bu javascript dosyasını şablon olarak nasıl ele alacağını bilmek istediklerinden, bu soruya cevap vermiyor. – davidism

+0

Geri bildiriminiz için teşekkür ederiz. Bu durumda yol hakkında açık olmak istedim çünkü uzun zamandır bilmediğim bir özellik. Ayrıca, javascript dosyasını şablon olarak ele almayı istediklerini kabul ediyorum, ancak sordukları soruna rağmen, temel problemlerini çözebileceğimi düşündüğüm bir cevabı verdim. P = – AlexLordThorsen

1

(safe süzgeç engelleyen tırnak kaçan başlar)

import os 

app = Flask(__name__.split('.')[0]) 

@app.template_global() 
def static_include(filename): 
    fullpath = os.path.join(app.static_folder, filename) 
    with open(fullpath, 'r') as f: 
     return f.read() 

Ve sonra şöyle içerebilir: yedi ve sadece yapıyor küresel işlev kayıt

{% block javascript %} 
    <script type="text/javascript"> 
     {{ static_include("myscript.js") | safe }} 
    </script> 
{% endblock %}