2014-09-11 4 views
7

Я установил Blueprint в моем приложении Flask, но я не могу заставить свою статическую папку работать. Я получаю 404 ошибки, когда они пытаются их достичь:Флажок Blueprint не может найти статическую папку

127.0.0.1 - - [11/Sep/2014 15:14:20] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 - 
127.0.0.1 - - [11/Sep/2014 15:14:20] "GET /static/static/css/bootstrap.min.css HTTP/1.1" 404 - 

Css один также добавляет статический дважды. JS имеет правильный/статический, но, похоже, не работает. Прямо сейчас моя статическая папка находится в корневом пути чертежа (app/dashboard). Я попытался положить его в app/static, но я получаю точные точные ошибки.

У меня есть следующие настройки:

app/dashboard/__init__.py:

from flask import Blueprint 
dashboard = Blueprint('dashboard', __name__, template_folder='templates', static_folder='static') 
from application.dashboard import controllers 

app/__init__.py:

# Blueprints  
from flask import Blueprint 
from application.dashboard import dashboard 
app.register_blueprint(dashboard) 

В app/templates/layout.html, у меня есть строка, которая ссылается на две статические файлы следующим образом:

<link rel="stylesheet" type="text/css" href="{{ url_for('dashboard.static', filename='css/bootstrap.min.css') }}"> 
<script src="{{ url_for('dashboard.static', filename='js/bootstrap.min.js') }}"></script> 

Мой app/dashboard/static каталог:

$ tree application/dashboard/static/ 
application/dashboard/static/ 
├── css 
│   ├── bootstrap-theme.css 
│   ├── bootstrap-theme.css.map 
│   ├── bootstrap-theme.min.css 
│   ├── bootstrap.css 
│   ├── bootstrap.css.map 
│   └── bootstrap.min.css 
├── fonts 
│   ├── glyphicons-halflings-regular.eot 
│   ├── glyphicons-halflings-regular.svg 
│   ├── glyphicons-halflings-regular.ttf 
│   └── glyphicons-halflings-regular.woff 
└── js 
    ├── bootstrap.js 
    └── bootstrap.min.js 

Любая идея, что здесь происходит? Как я могу правильно структурировать свой Blueprint? Я выполнил инструкции по документации Flask и получил эту ошибку.

спасибо.

ответ

6

Посмотрите, как у вас есть проблемы с двумя одинаковыми маршрутами для применения и плана. См. Мой another answer part 3.

Ваш маршрут поиска /static/<path:path> до .static конечная точка.

Ваш план маршрута /static/<path:path> к dashboard.static конечной точки, потому что у вас нет url_prefix когда регистр план и иметь /static - префикс статической папки.

Таким образом, вы можете использовать один из следующих решений:

  1. использование только приложения статической папки.
  2. комплект url_prefix при регистрации плана.
  3. использовать другой префикс статической папки для чертежа.
  4. отключить статическую папку приложения app = Flask(__name__, static_folder=None).
  5. использование hacks with static endpoint descriptor.
+0

Хм, я не уверен, что понимаю, что такое решение. Возможно ли установить префикс url, но есть ли статическая папка для 'dashboard/static'? – darksky

+0

Добавление 'url_prefix = 'dashboard'' не работает кстати. – darksky

+0

Кажется, что бы я ни добавил, он не вступает в силу с Blueprint. Он вступает в силу, если я добавлю его в приложение. Почему это? – darksky

0

Вам нужно добавить префикс URL для вашего плана, как так

app.register_blueprint(dashboard, url_prefix='/dashboard') 
+0

Я не хочу, чтобы все панели приборов имели префикс префикса. Это все еще возможно? – darksky

+0

Это фактически не работает. – darksky

0

Почему бы не использовать nginx? Это быстрее с точки зрения производительности, и вам не нужно писать код для обслуживания статического контента.

+2

Я буду использовать веб-сервер для производства. На данный момент я тестирую локально. – darksky

+0

Конечно, но nginx легко запускается локально и менее сложно, чем кодирование в колбу, набор чертежей. Кроме того, это поможет обеспечить проверку того, что вы разрабатываете против, перед тем, как запустить его в свою среду prod. –

+2

Хороший совет, но это похоже на ответ «У меня возникли проблемы с реализацией метода линейной сортировки для класса списка. Я где-то делаю синтаксическую ошибку?» с «Почему бы не использовать RB-дерево? Это не слишком сложно, и он последовательно« O (logn) ». – eenblam

0

У меня была та же проблема. Решение заключалось в том, чтобы перейти к init.пй файл для Blueprint, а затем добавить static_folder = "статический" в заявлении, определяющего план: из опоки импорта Blueprint

главная = Blueprint ('главный', имя, static_folder = "статический")

из. импортные маршруты

Поскольку «приложение» на самом деле работает как Blueprint, «main» здесь, это говорит ему искать статическую папку внутри основного пакета. Это не сработает, если вы добавите это в init .py скрипт для приложения (спросите меня, как я знаю это ...)

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