2014-09-01 4 views
1

Я работал над простым флеш-приложением, и в какой-то момент решил добавить пользовательский стиль CSS рядом с Bootstrap. Однако по какой-то причине этот CSS-файл отображается как пустой файл. Открываю ли я его с помощью http://localhost:5000/static/style.css или проверяю Firebug, результат тот же. bootstrap.min.css загружен, но style.css пуст, хотя на самом деле он не пуст.Flask отображает css файл как пустой

Шаблоны: путь к папке

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

CSS является app_root/static/css/style.css и app_root/static/css/lib/bootstrap.min.css

Но, как я уже говорил, файлы загружаются.

У кого-нибудь были подобные проблемы?

EDIT:

Сначала я думал, что это была проблема CSS, поэтому я сделал много редактирования. Это то, что style.css в настоящее время выглядит следующим образом:

.navbar { 
    background-color: #aaa; 
} 

p { 
    font: Arial; 
} 

body { 
    height: 100%; 
} 

Что я имею в виду «файл порожняком» является то, что как только он загружен, он будет загружен пустой. Я до сих пор не знаю, почему это происходит, но после игры с ним какое-то время я заметил, что это имеет какое-то отношение к имени файла. Например, если я переименую style.css в main.css и загрузите это в html, все работает отлично.

Как вы можете видеть, оба файла загружены. style.css и bootstrap.min.css

enter image description here

бутстрапирования Содержание:

enter image description here

содержание style.css

enter image description here

После переименования style.css в main.css

enter image description here

Рекурсивная структура каталогов:

project/static/css: 
lib/ style.css 

project/static/css/lib: 
bootstrap-theme.css bootstrap-theme.min.css bootstrap.css bootstrap.min.css 

EDIT 2:

Кроме того, мне удалось воссоздать эту идентичную проблему в отдельном тестовом проекте (в другом virtualenv) с простым app.py модуль, статические и templat e папки.

EDIT 3: Test код приложения:

from flask import Flask, render_template  

app = Flask(__name__)   

@app.route('/') 
def index(): 
    return render_template('index.html')   

if __name__ == '__main__': 
    app.run() 

структура папок одно и то же:

test/ 

./test: 
app.py 
static/ 
templates/ 

./test/static: 
css/ 

./test/static/css: 
lib/ 
main.css 

./test/static/css/lib: 
bootstrap.min.css 

./test/templates: 
index.html 

И приложение запускается следующим образом:

python app.py 
+0

Я думаю, вам нужно предоставить дополнительную информацию или поделиться своим кодом. Каков рабочий URL-адрес для bootstrap.min.css? Что говорят журналы? –

+1

И что вы подразумеваете под «style.css пуст, хотя на самом деле он не пуст». Что он тогда содержит? Вставьте его содержимое в свой вопрос. –

+0

Как вы инициализируете свое фляжное приложение? Как вы делаете свои шаблоны? Не могли бы вы поделиться вторым приложением, которое даст те же результаты? –

ответ

4

ОБНОВЛЕНИЕ: Я ошибался в отношении колбы, служащей пустой CSS. Фланец не был проблемой, браузер был. Браузер был открыт в течение длительного времени, и изначально он кэшировал файл css как пустой (потому что изначально файл был пуст).

Похоже, что самым простым решением этой проблемы было бы отключить кеширование браузера в любом из инструментов разработчика (Firebug в моем случае). Другое решение было бы добавить HTTP заголовки всех представлений, как это:

@auth.after_app_request 
def after_request(response): 
    response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' 
    response.headers['Pragma'] = 'no-cache' 
    response.headers['Expires'] = '0' 
    return response 

Хотя последний кажется плохой идеей.

P.S. Извините мою нообильность.

1

Это может не отвечайте на свой вопрос напрямую, но, возможно, n решите свою проблему вообще. Работа с Bootstrap должна быть простой, если вы знаете, как это сделать, иначе это может быть довольно запутанным.

После этого я нашел пакет с именем flask-bootstrap, который решил часть проблемы. Затем я написал себе (и обнародовал) https://pypi.python.org/pypi/machete/, который является инструментом для генерации кода python из шаблонов.

В вашем случае, вы можете попробовать ввести пустой каталог и введите:

$ machete -t bootstrap 

другие инструменты, как cookiecutter, но я не пробовал их еще.

Это создаст все необходимые файлы, чтобы сделать ваш код Deployable на PyPi (если вы хотите), и создаст все файлы с работоспособными ситуациями, просто набрав:

$ python run.py 

Затем проверьте код , Вы можете сделать это просто, чтобы понять, как работает фляжка-бутстрап (которая отличается от загрузки загрузочного буфера на голые руки, что похоже на ваш сценарий). Или вы можете использовать эту структуру для кодирования.

Таким образом, вы можете сосредоточиться на кодировании, а не на решении проблем с установкой.

+0

Отличный совет! Я знаю расширение Flask-bootstrap, но все же с жадностью решил использовать внешний интерфейс приложения, изучая код. Кроме того, спасибо за предложение ** machete ** и ** cookiecutter **. Эти пакеты новы для меня. –

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