2014-11-03 5 views
3

Я хочу сделать что-то вроде этого:Как установить static_url_path в применении Колба

app = Flask(__name__) 
app.config.from_object(mypackage.config) 
app.static_url_path = app.config['PREFIX']+"/static" 

когда я пытаюсь:

print app.static_url_path 

Я получаю правильный static_url_path

Но в моих шаблонах, когда Я использую url_for('static'). Файл html, сгенерированный с использованием jinja2, по-прежнему имеет статический URL-адрес по умолчанию /static с отсутствующим PREFIX, что я добавлено.

Если я жёстко на этот путь:

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

Он отлично работает. Что я делаю не так?

ответ

4

Колба создает URL-адрес при создании объекта Flask(). Вам нужно повторно добавить этот маршрут:

# remove old static map 
url_map = app.url_map 
try: 
    for rule in url_map.iter_rules('static'): 
     url_map._rules.remove(rule) 
except ValueError; 
    # no static view was created yet 
    pass 

# register new; the same view function is used 
app.add_url_rule(
    app.static_url_path + '/<path:filename>', 
    endpoint='static', view_func=app.send_static_file) 

Это будет проще всего настроить Flask() объект с правильным статическим URL пути.

Демо:

>>> from flask import Flask 
>>> app = Flask(__name__) 
>>> app.url_map 
Map([<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>]) 
>>> app.static_url_path = '/PREFIX/static' 
>>> url_map = app.url_map 
>>> for rule in url_map.iter_rules('static'): 
...  url_map._rules.remove(rule) 
... 
>>> app.add_url_rule(
...  app.static_url_path + '/<path:filename>', 
...  endpoint='static', view_func=app.send_static_file) 
>>> app.url_map 
Map([<Rule '/PREFIX/static/<filename>' (HEAD, OPTIONS, GET) -> static>]) 
+0

Благодаря он работал с небольшими изменениями. Мне пришлось установить static_url_path и static_folder в None, когда я изначально создаю объект FLask. И затем add_url_rule. [Я не мог заставить его работать, пытаясь удалить правила, а затем добавить его, как вы упомянули в решении] ... Большое спасибо. – user3873617

+0

@ user3873617: если вы установите 'static_folder' значение' None', тогда правило не будет создано в первую очередь. –

Смежные вопросы