# PyNanoCMS
Статичный сайт генерируется в папку `<site>_static`. Её
содержимое помещается на сервер и будет доступно пользователю,
заходящему на сайт.
### Структура папок.
* Папка `templates` содержит шаблоны сайта
* Папка `static` содержит файлы, необходимые для отображения сайта (CSS, Java Script)
* Папка `other` содержит прочие файлы и папки, которые нужно разместить на сайте как есть. Например, `favicon.ico`, `robots.txt` и т. д. При генерации они все будут автоматически скопированы в папку `<site>_static`.
### Конфигурация
Файл `pages.json` содержит описания страниц. Например:
```json
[
{
"url": "/help/",
"page_id": "help",
"context": {},
"template": "help.html"
}
]
```
Где:
* `url` - адрес страницы на сайте;
* `page_id` - уникальный идентификатор страницы, состоящий из букв латиницы, цифр и подчеркиваний.
Используется в шаблонах для указания адреса страницы, например, `<a href="{{ urls.help }}">Помощь</a>`.
* `context` - дополнительный контекст для передачи в шаблон.
Например, `"context": {"cost": "10 руб."}`, в шаблоне может быть исрользован как `{{ cost }}`.
* `template` - шаблон страницы, у разных страниц может быть один шаблон, шаблоны можно организовать в папки и тогда писать соответственно, например, `"template\": "help/help.html"`.
### Генерация
Для запуска генерации служит `pyNanoCMS.exe` Файл `pynano.log`, сюда пишутся
ошибки, если происходят.
При перегенерации меняются только те файлы, которые реально изменились.
### Live-сервер
Если запустить команду с опцией `--serve` (короткий вариант `-s`), то по
адресу `<http://127.0.0.1:8000/>` будет доступна сгенерированная версия
сайта, причем при любом изменении исходных файлов сайт будет
автоматически регенерироваться.
Raw data
{
"_id": null,
"home_page": "https://github.com/rombr/pynano",
"name": "PyNanoCMS",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "HTTP, static site generator",
"author": "Roman Bondar",
"author_email": "rombr5@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/24/b5/c54e9a8827fc5b4ccac7c8006b6096cc1e50c6012a0caa8eeb7af662eb01/pynanocms-0.4.2.tar.gz",
"platform": null,
"description": "# PyNanoCMS\n\n\u0421\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0441\u0430\u0439\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 `<site>_static`. \u0415\u0451\n\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e,\n\u0437\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u043c\u0443 \u043d\u0430 \u0441\u0430\u0439\u0442.\n\n### \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a.\n\n* \u041f\u0430\u043f\u043a\u0430 `templates` \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0441\u0430\u0439\u0442\u0430\n* \u041f\u0430\u043f\u043a\u0430 `static` \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0444\u0430\u0439\u043b\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0430\u0439\u0442\u0430 (CSS, Java Script)\n* \u041f\u0430\u043f\u043a\u0430 `other` \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0430\u043f\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, `favicon.ico`, `robots.txt` \u0438 \u0442. \u0434. \u041f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u043d\u0438 \u0432\u0441\u0435 \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0430\u043f\u043a\u0443 `<site>_static`.\n\n### \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\n\n\u0424\u0430\u0439\u043b `pages.json` \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n```json\n[\n{\n \"url\": \"/help/\",\n \"page_id\": \"help\",\n \"context\": {},\n \"template\": \"help.html\"\n}\n]\n```\n\n\u0413\u0434\u0435:\n\n* `url` - \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435;\n* `page_id` - \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0431\u0443\u043a\u0432 \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u044b, \u0446\u0438\u0444\u0440 \u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0439.\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, `<a href=\"{{ urls.help }}\">\u041f\u043e\u043c\u043e\u0449\u044c</a>`.\n* `context` - \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d.\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, `\"context\": {\"cost\": \"10 \u0440\u0443\u0431.\"}`, \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u0440\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a `{{ cost }}`.\n* `template` - \u0448\u0430\u0431\u043b\u043e\u043d \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d \u0448\u0430\u0431\u043b\u043e\u043d, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0438 \u0438 \u0442\u043e\u0433\u0434\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, `\"template\\\": \"help/help.html\"`.\n\n### \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f\n\n\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u0443\u0436\u0438\u0442 `pyNanoCMS.exe` \u0424\u0430\u0439\u043b `pynano.log`, \u0441\u044e\u0434\u0430 \u043f\u0438\u0448\u0443\u0442\u0441\u044f\n\u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442.\n\n\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c.\n\n### Live-\u0441\u0435\u0440\u0432\u0435\u0440\n\n\u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 `--serve` (\u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 `-s`), \u0442\u043e \u043f\u043e\n\u0430\u0434\u0440\u0435\u0441\u0443 `<http://127.0.0.1:8000/>` \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f\n\u0441\u0430\u0439\u0442\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0430\u0439\u0442 \u0431\u0443\u0434\u0435\u0442\n\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Static site generator",
"version": "0.4.2",
"project_urls": {
"Homepage": "https://github.com/rombr/pynano"
},
"split_keywords": [
"http",
" static site generator"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "e643826edf8befe918d62a113434d00d52f64dbe58c13dc9684c02052d5acdcb",
"md5": "8bd095ef2eff21269598d067196f6060",
"sha256": "60d84e32f46e1d88a9cac649c6a4942e5b98031939a9362c887e9b9491de4ebb"
},
"downloads": -1,
"filename": "pynanocms-0.4.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8bd095ef2eff21269598d067196f6060",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 7387484,
"upload_time": "2024-07-28T19:57:16",
"upload_time_iso_8601": "2024-07-28T19:57:16.189805Z",
"url": "https://files.pythonhosted.org/packages/e6/43/826edf8befe918d62a113434d00d52f64dbe58c13dc9684c02052d5acdcb/pynanocms-0.4.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "24b5c54e9a8827fc5b4ccac7c8006b6096cc1e50c6012a0caa8eeb7af662eb01",
"md5": "22de1c5916898102d96e3f98af500ae2",
"sha256": "5608b9fbcc6775b7da5e83e203795d53106460395760a6c382c4200ebc356d8e"
},
"downloads": -1,
"filename": "pynanocms-0.4.2.tar.gz",
"has_sig": false,
"md5_digest": "22de1c5916898102d96e3f98af500ae2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 7388727,
"upload_time": "2024-07-28T19:57:21",
"upload_time_iso_8601": "2024-07-28T19:57:21.915198Z",
"url": "https://files.pythonhosted.org/packages/24/b5/c54e9a8827fc5b4ccac7c8006b6096cc1e50c6012a0caa8eeb7af662eb01/pynanocms-0.4.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-28 19:57:21",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "rombr",
"github_project": "pynano",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pynanocms"
}