it-swarm.com.ru

Приложение не получает файл .css (flask/python)

Я рендеринг шаблона, который я пытаюсь стилизовать с помощью внешней таблицы стилей. Файловая структура выглядит следующим образом.

/app
    - app_runner.py
    /services
        - app.py 
    /templates
        - mainpage.html
    /styles
        - mainpage.css

mainpage.html выглядит так

<html>
    <head>
        <link rel= "stylesheet" type= "text/css" href= "../styles/mainpage.css">
    </head>
    <body>
        <!-- content --> 

Ни один из моих стилей не применяется, хотя. Имеет ли это какое-то отношение к тому факту, что html - это шаблон, который я отображаю? Питон выглядит так.

return render_template("mainpage.html", variables..)

Я знаю, что это много работает, потому что я все еще могу сделать шаблон. Однако, когда я попытался переместить свой код стиля из блока «style» в теге «head» html во внешний файл, все стилирование ушло, оставив голую страницу html. Кто-нибудь видит какие-либо ошибки с моей файловой структурой?

58
Zack

Вам необходимо иметь «статическую» настройку папки (для файлов css/js), если вы не перезаписали ее во время инициализации Flask. Я предполагаю, что вы не изменили это. 

Ваша структура каталогов для css должна быть такой:

/app
    - app_runner.py
    /services
        - app.py 
    /templates
        - mainpage.html
    /static
        /styles
            - mainpage.css

Обратите внимание, что ваш каталог/styles должен находиться в/static

Затем сделайте это

<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='styles/mainpage.css') }}">

Flask теперь будет искать файл css в static/styles/mainpage.css

129
codegeek

В шаблонах jinja2 (которые использует колба) используйте

href="{{ url_for('static', filename='mainpage.css')}}"

Файлы static обычно находятся в папке static, если не указано иное.

12
njzk2

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

Я даже пытался отойти от conda и использовать pip, чтобы перейти на python 3.7, я попробовал все предложенное кодирование и ни одно из них не исправлено.

И вот почему (проблема):

по умолчанию python/flask ищет статические и шаблоны в структуре папок, например:

/Users/username/folder_one/folder_two/ProjectName/src/app_name/<static>
 and 
/Users/username/folder_one/folder_two/ProjectName/src/app_name/<template>

вы можете проверить это самостоятельно с помощью отладчика Pycharm (или чего-либо еще) и проверить значения в приложении (app = Flask ( name )) и найти teamplate_folder и static_folder

чтобы исправить это, вы должны указать значения при создании приложения примерно так:

TEMPLATE_DIR = os.path.abspath('../templates')
STATIC_DIR = os.path.abspath('../static')

# app = Flask(__name__) # to make the app run without any
app = Flask(__name__, template_folder=TEMPLATE_DIR, static_folder=STATIC_DIR)

пути TEMPLATE_DIR и STATIC_DIR зависят от того, где находится файловое приложение. в моем случае, смотрите картинку, она находилась в папке под src.

вы можете изменить шаблон и статические папки по своему желанию и зарегистрироваться в приложении = Flask ...

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

hTML-код выглядит так:

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

это код

Здесь структура папок

0
Stefano Tuveri

Я сейчас использую версию колбы 1.0.2 . Указанные выше файловые структуры не работают для меня, но я нашел такую, которая выглядит следующим образом:

app_folder / flask_app.py Статическая / style.css Шаблоны / index.html

(Обратите внимание, что «static» и «templates» - это папки, которые должны называться одинаково.)

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

>> import flask
>> flask.__version__
0
Ly-Bach