Дисклеймер
Я только начинаю свой путь, как в веб-разработке, так и в программировании в принципе, с ответом на этот вопрос мучился 2 дня и казалось бы перепробовал все, НО как это обычно бывает, решение лежало на поверхности.
p.s. Могу путаться в терминах в силу своей неопытности, прошу строго не судить. Всегда рад конструктивной обратной связи, спасибо за понимание! Да, я знаю о существовании Django, просто начинать как мне кажется лучше с голого кода и дальше с базовыми знаниями переходить к изучению этого прекрасного фреймворка.
Начало
На одном сливе курсов по Fullstack разработке на Python, прохожу модуль: Html + Css + Python, автор работает в Sublime text и у него прекрасно совмещаются все три языка, я же по определенному стечению обстоятельств пишу код в PyCharm community edition (пробовал и Sublime и Atom и даже в intelij idea попытался-знаю, что она в основном для братьев Джавистов предназначена, но все же).
При совмещении Html + Css в Pc возникла следующая проблема:
Версия community не поддерживает файлы с расширением .css
Решение
Решения у меня довольно примитивные и рассчитаны под два варианта развития событий.
Первый: Вы пишете голый html код не используя при этом python и вам просто нужно проделать определенные манипуляции с его стилистикой, давайте смотреть:
Создаем файл с расширением .html
Если вы создаете файл в Pc, то файл у вас будет уже со следующим шаблоном html кода ( Если нет, то возьмите либо отсюда, либо можете погуглить как его включить):
<!DOCTYPE html>
<html lang="en">
<head> <!-- Как мы видим у нас есть тег <head>, именно в него мы и будем добавлять наш код css -->
<meta charset="UTF-8">
<title>Title</title>
</head> <!-- Тут тег <head> закрывается -->
<body>
</body>
</html>
Добавление кода:
Для того чтобы нам было что менять, давайте добавим пару элементов на нашу страницу, делается это следующим образом:
<!DOCTYPE html>
<html lang="en">
<head> <!-- Как мы видим у нас есть тег <head>, именно в него мы и будем добавлять наш код css -->
<meta charset="UTF-8">
<title>Title</title>
</head> <!-- Тут тег <head> закрывается -->
<body> <!-- Тут открываем тег <body> -->
<h1>Учебный текст для хабра</h1> <!-- Это тег заголовка с размером "1" -->
<hr/> <!-- Тут разделяем заголовок и текст сплошной чертой -->
<p>Как все таки использовать стили?</p> <!-- Это просто текст -->
<ol> <!-- Тут открываем нумерованный список -->
<li>Мотивация</li> <!-- Перечисляем элементы нумерованного списка -->
<li>И другая тема</li><!-- Перечисляем элементы нумерованного списка -->
</ol> <!-- Тут закрываем нумерованный список -->
<hr/> <!-- Снова разделяем заголовок и текст сплошной чертой -->
<p><a href='https://habr.com/ru/all/'>Ссылка на самый крутой портал</a><p> <!-- Пишем текст и интегрируем в него ссылку на САМЫЙ КРУТОЙ ПОРТАЛ -->
</body> <!-- Тут закрываем тег <body> -->
</html>
Этот код будет выдавать следующий результат:
![](https://habrastorage.org/getpro/habr/upload_files/7b3/f95/241/7b3f952410e074daca3e578aced63190.png)
Прикрутим к нашему файлу css:
<!DOCTYPE html>
<html lang="en">
<head> <!-- Как мы видим у нас есть тег <head>, именно в него мы и будем добавлять наш код css -->
<meta charset="UTF-8">
<title>Title</title>
<style> <!-- Открываем тег <style> - именно внутри него указываются наши стили -->
body {
background: #000000;
color: #fff;
}
a {
color: #808000
}
h1 {
color: #008080
}
p {
color: #008000
}
ol {
color: #008000
}
</style> <!-- Не забываем закрывать тег <style> -->
</head> <!-- Тут тег <head> закрывается -->
<body>
<h1>Учебный текст для хабра</h1>
<hr/>
<p>Как все таки использовать стили?</p>
<ol>
<li>Мотивация</li>
<li>И другая тема</li>
</ol>
<hr/>
<p><a href='https://habr.com/ru/all/'>Ссылка на самый крутой портал</a><p>
</body>
</html>
Объясняю по написанию css: Внутри тега <style> мы указываем те теги, в которых хотим что-либо изменить, в нашем случае мы меняем для всех элементов в теги <body> фон и цвет текста ( сам синтаксис можно увидеть в коде выше), далее идем по ВСЕМ отдельным элементам, а именно: a, h1, p, ol. Не забываем, что теги там указываются "Голые" и цвет именно в таком формате записи надо указывать не просто название, а ИМЕННО КОД ЦВЕТА. Получаем такой результат:
![](https://habrastorage.org/getpro/habr/upload_files/467/38f/228/46738f228a9d6ed12061ff657eed24e2.png)
Как мы видим, все параметры успешно изменены.
Для изменения других параметров по типу: Размера, самого шрифта и тд, просто найдите синтаксис в интернете и вставьте в фигурные скобки{} к тому элементу, который необходим.
CSS + HTML + Python
Теперь переходим к более интересной теме, а именно совмещение всех трех языков и прямо в IDE PyCharm.
Сразу скажу, что тут не будет написания какого то бэкенда, связи скрипта с сервером или еще каких то слов на продвинутом языке, тут мы просто создадим небольшой генератор html, обернем ее в функцию в файле .py, закинем туда css, запишем все это в html и откроем страницу.
Допустим, у вас не генерируется html шаблон, который я предоставил выше или вы работаете из другого редактора или еще по каким то причинам, давайте станем более независимы и напишем свой шаблон. Приступим:
Создаем файл с расширением .py
Задаем функцию с помощью ключевого слова def
# -*- coding: utf-8 -*-
# У меня возникает ошибка связанная с кодировкой, поэтому в комментарии сверху указываю то, что указываю.
def habr_sample(file, style, body, mode='w', encoding='windows-1251', title='title'): # Прописываем ключевое слово def, далее прописываем название функции и указываем параметры
'''
Функция-шаблонизатор html кода из python
:param file:
:param style:
:param body:
:param mode:
:param encoding:
:param title:
:return:
'''
fo = open(file, mode)
habr_html_sample = f"""
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset={encoding}>
<title>{title}</title>
<style>
{style}
</style>
</head>
<body>
{body}
</body>
</html>
"""
fo.write(habr_html_sample)
fo.close()
# Не забываем следить за отступами, указывать, что это именно f-строка, для возможности указать внутри текста аргументы функции
# и ставить тройные кавычки для того, чтобы указывать многострочный код
style_css = '''
body {
background: #000000;
color: #fff;
}
a {
color: #808000
}
h1 {
color: #008080
}
p {
color: #008000
}
ol {
color: #008000
}
'''
body = """
<h1>Учебный текст для хабра</h1>
<hr/>
<p>Как все таки использовать стили?</p>
<ol>
<li>Мотивация</li>
<li>И другая тема</li>
</ol>
<hr/>
<p><a href='https://habr.com/ru/all/'>Ссылка на самый крутой портал</a><p>
"""
habr_sample('habr.html', style_css, body)
Пояснения: в функцию передаются 3 позиционных аргумента и 3 ключевых
Аргумент file - принимает в себя файл для записи (html документ)
Аргумент style - сюда передаем переменную со стилями css ( предварительно записав в переменную)
Аргумент body - сюда передаются те теги, которые хотим использовать в теле кода
Аргумент mode - это режим в котором мы открываем файл ('w' - в этом режиме мы только перезаписываем файл, про другие режимы можете почитать в интернете и если нужно, то после позиционных аргументов, указать нужный вам режим, например: mode='a')
Аргумент encoding - это кодировка, в которой представлен html файл, по умолчанию она равна "UTF-8", но у меня при этой кодировке ничего не отображается, поэтому я по умолчанию сделал 'windows-1251' ( это конкретно для файла .html, для файлов .py, когда я использую их с HTML, я использую следующий синтаксис: в самом верху программы указываю комментарий # -*- coding: utf-8 -*-
Далее обязательно пишем документацию к функции
Далее вызываем функцию open()- туда передаем название файла и режим открытия(это берем из аргументов нашей главной функции)
Далее обьявляем переменную и передаем туда то, что будет у нас находиться в <body>
Используем переменную, где мы открывали файл и применяем функцию write()- сюда передаем переменную, в которую записывали <body>
Далее закрываем функцию
При вызове передаем все параметры и получаем результат:
![](https://habrastorage.org/getpro/habr/upload_files/bb9/209/c12/bb9209c12573b725e73b0010322edacc.png)
Так же можно наш шаблон разбить на подшаблоны, по типу: формирования заголовков и тд
По сути та работа, которую я проделал из python - бесполезна тк такие шаблоны нужны для определенных частей, например шапки или подвала сайта или формы для сбора контактов, а то что делал я - не более чем учебные цели.
Если эта статья облегчит хоть кому-нибудь жизнь, пишите фидбэк.
Могу потихоньку рассказывать о таких нюансах, которые сам для себя узнаю и понемногу улучшать подачу материала и оформление, если кому-то это будет нужно.
А если сюда зайдут каким-то образом матерые волки, то буду признателен за конструктивную критику.
Спасибо за уделенное время!