Spaces:
Sleeping
Sleeping
| # FAQ | |
| <!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! --> | |
| ## Why does my editor say that I have errors in my FastHTML code? | |
| Many editors, including Visual Studio Code, use PyLance to provide error | |
| checking for Python. However, PyLance’s error checking is just a guess – | |
| it can’t actually know whether your code is correct or not. PyLance | |
| particularly struggles with FastHTML’s syntax, which leads to it often | |
| reporting false error messages in FastHTML projects. | |
| To avoid these misleading error messages, it’s best to disable some | |
| PyLance error checking in your FastHTML projects. Here’s how to do it in | |
| Visual Studio Code (the same approach should also work in other editors | |
| based on vscode, such as Cursor and GitHub Codespaces): | |
| 1. Open your FastHTML project | |
| 2. Press `Ctrl+Shift+P` (or `Cmd+Shift+P` on Mac) to open the Command | |
| Palette | |
| 3. Type “Preferences: Open Workspace Settings (JSON)” and select it | |
| 4. In the JSON file that opens, add the following lines: | |
| ``` json | |
| { | |
| "python.analysis.diagnosticSeverityOverrides": { | |
| "reportGeneralTypeIssues": "none", | |
| "reportOptionalMemberAccess": "none", | |
| "reportWildcardImportFromLibrary": "none", | |
| "reportRedeclaration": "none", | |
| "reportAttributeAccessIssue": "none", | |
| "reportInvalidTypeForm": "none", | |
| "reportAssignmentType": "none", | |
| } | |
| } | |
| ``` | |
| 5. Save the file | |
| Even with PyLance diagnostics turned off, your FastHTML code will still | |
| run correctly. If you’re still seeing some false errors from PyLance, | |
| you can disable it entirely by adding this to your settings: | |
| ``` json | |
| { | |
| "python.analysis.ignore": [ "*" ] | |
| } | |
| ``` | |
| ## Why the distinctive coding style? | |
| FastHTML coding style is the [fastai coding | |
| style](https://fast.ai/docs/dev/style.html). | |
| If you are coming from a data science background the **fastai coding | |
| style** may already be your preferred style. | |
| If you are coming from a PEP-8 background where the use of ruff is | |
| encouraged, there is a learning curve. However, once you get used to the | |
| **fastai coding style** you may discover yourself appreciating the | |
| concise nature of this style. It also encourages using more functional | |
| programming tooling, which is both productive and fun. Having said that, | |
| it’s entirely optional! | |
| ## Why not JSX? | |
| Many have asked! We think there’s no benefit… Python’s positional and kw | |
| args precisely 1:1 map already to html/xml children and attrs, so | |
| there’s no need for a new syntax. | |
| We wrote some more thoughts on Why Python HTML components over Jinja2, | |
| Mako, or JSX | |
| [here](https://www.answer.ai/posts/2024-08-03-fasthtml.html#why). | |
| ## Why use `import *` | |
| First, through the use of the | |
| [`__all__`](https://docs.python.org/3/tutorial/modules.html#importing-from-a-package) | |
| attribute in our Python modules we control what actually gets imported. | |
| So there’s no risk of namespace pollution. | |
| Second, our style lends itself to working in rather compact Jupyter | |
| notebooks and small Python modules. Hence we know about the source code | |
| whose libraries we `import *` from. This terseness means we can develop | |
| faster. We’re a small team, and any edge we can gain is important to us. | |
| Third, for external libraries, be it core Python, SQLAlchemy, or other | |
| things we do tend to use explicit imports. In part to avoid namespace | |
| collisions, and also as reference to know where things are coming from. | |
| We’ll finish by saying a lot of our users employ explicit imports. If | |
| that’s the path you want to take, we encourage the use of | |
| `from fasthtml import common as fh`. The acronym of `fh` makes it easy | |
| to recognize that a symbol is from the FastHTML library. | |
| ## Can FastHTML be used for dashboards? | |
| Yes it can. In fact, it excels at building dashboards. In addition to | |
| being great for building static dashboards, because of its | |
| [foundation](https://fastht.ml/about/foundation) in ASGI and [tech | |
| stack](https://fastht.ml/about/tech), FastHTML natively supports | |
| Websockets. That means using FastHTML we can create dashboards that | |
| autoupdate. | |
| ## Why is FastHTML developed using notebooks? | |
| Some people are under the impression that writing software in notebooks | |
| is bad. | |
| [Watch this | |
| video](https://www.youtube.com/watch?v=9Q6sLbz37gk&ab_channel=JeremyHoward). | |
| We’ve used Jupyter notebooks exported via `nbdev` to write a wide range | |
| of “very serious” software projects over the last three years. This | |
| includes deep learning libraries, API clients, Python language | |
| extensions, terminal user interfaces, web frameworks, and more! | |
| [nbdev](https://nbdev.fast.ai/) is a Jupyter-powered tool for writing | |
| software. Traditional programming environments throw away the result of | |
| your exploration in REPLs or notebooks. `nbdev` makes exploration an | |
| integral part of your workflow, all while promoting software engineering | |
| best practices. | |
| ## Why not pyproject.toml for packaging? | |
| FastHTML uses a `setup.py` module instead of a `pyproject.toml` file to | |
| configure itself for installation. The reason for this is | |
| `pyproject.toml` is not compatible with [nbdev](https://nbdev.fast.ai/), | |
| which is what is used to write and build FastHTML. | |
| The nbdev project spent around a year trying to move to pyproject.toml | |
| but there was insufficient functionality in the toml-based approach to | |
| complete the transition. | |