ДокументацияПонять модель

Структура проекта

Каждый файл в проекте Nexy выполняет одно задание, и его расположение зависит от маршрутизатора: src/routes/ для файловой маршрутизации, src/apps/ для модульного маршрутизатора.

Верхний уровень

my-app/
src/
routes/every file is a route
index.nexy→ /
layout.nexyshared layout, not a route
api/hello.py→ /api/hello
components/imported components (a convention, not enforced)
globale.cssglobal styles (created by nexy new)
public/served at /
nexyconfig.pyproject configuration
pyproject.toml
package.jsononly with a client framework
vite.config.tsonly with a client framework
__nexy__/build output - generated, never edited

Чтобы выбрать папку, спросите, что это за файл:

  • Что-то, что браузер может открыть — маршрут: src/routes/.
  • Кусок, используемый несколькими маршрутами — компонент или модуль: src/components/, src/.
  • Файл использовался как есть - public/.
  • Сгенерировано - __nexy__/; никогда не редактируйте его.
my-app/
src/
apps/controllers, modules and their views
app_module.pythe root module, given to useRouter
app_controller.py
app_view.nexya view a controller returns
layout.nexythe frame the controllers pass their view to
users/one folder per feature: controller, module, service, model
components/imported components (a convention, not enforced)
globale.cssglobal styles (created by nexy new)
public/served at /
nexyconfig.pyproject configuration: useRouter = AppModule
pyproject.toml
package.jsononly with a client framework
vite.config.tsonly with a client framework
__nexy__/build output - generated, never edited

Чтобы выбрать папку, спросите, что это за файл:

  • URL — метод контроллера в src/apps/, зарегистрированный его модулем.
  • Страница — представление .nexy рядом с его контроллером, возвращаемое с помощью useViews.
  • Фрагмент, использованный в нескольких представлениях - src/components/.
  • Файл использовался как есть - public/.
  • Сгенерировано - __nexy__/; никогда не редактируйте его.
my-app/
src/
legacy/the FastAPI router you include
api.pyrouter = APIRouter(prefix="/api")
routes/pages and route files, served next to it
index.nexy→ /
components/imported components (a convention, not enforced)
globale.cssglobal styles (created by nexy new)
public/served at /
nexyconfig.pyproject configuration: useRouter = router
pyproject.toml
package.jsononly with a client framework
vite.config.tsonly with a client framework
__nexy__/build output - generated, never edited

Чтобы выбрать папку, спросите, что это за файл:

  • Маршрут включенного приложения - там, где оно уже есть, здесь src/legacy/.
  • Новая страница или маршрут - src/routes/, рядом с включенным роутером.
  • Файл использовался как есть - public/.
  • Сгенерировано - __nexy__/; никогда не редактируйте его.

src/routes/

Каждый файл становится маршрутом, за исключением зарезервированных имен, указанных ниже. Путь к файлу без расширения представляет собой URL-адрес — см. маршрутизация на основе файлов.

Файл Роль
layout.nexy оборачивает родственные и дочерние страницы
errors.nexy 500 страниц для каталога
notfound.nexy Страница 404 для каталога
dependencies.py общие FastAPI зависимости для каталога
__init__.py Python маркер пакета
loading.nexy зарезервировано — исключено из маршрутов, но пока не имеет эффекта во время выполнения

Каждое имя страницы также существует для каждой платформы. При настройке react() layout.jsx и layout.tsx зарезервированы точно так же, как layout.nexy. Списки строятся в nexy/core/config.py (LAYOUT_FILE_NAMES, ERROR_FILE_NAMES, NOTFOUND_FILE_NAMES, LOADING_FILE_NAMES).

src/apps/

Контроллер отвечает на URL-адреса, модуль группирует контроллеры и провайдеры, а корневой модуль монтируется с помощью useRouter в nexyconfig.py:

src/apps/app_controller.py
from nexy.decorators import Controllerfrom nexy.hooks import useViews LAYOUT = "src/apps/layout.nexy"  @Controller()class AppController:    async def get(self):        return useViews(LAYOUT, context={"children": useViews("src/apps/app_view.nexy")})
src/apps/app_module.py
from nexy.decorators import Module from .app_controller import AppController  @Module()class AppModule:    controllers = [AppController]
nexyconfig.py
from nexy.core.models import NexyConfigModel from src.apps.app_module import AppModule  class NexyConfig(NexyConfigModel):    useRouter = AppModule    useAliases = {"@": "src"}  # the views import @/components/...

Ни один файл в src/apps/ не является маршрутом по своему имени: отвечают только контроллеры, перечисленные в модуле. См. модульная маршрутизация.

public/

Здесь подаются файлы из корня сайта: /favicon.ico, /robots.txt, изображения, шрифты.

__nexy__/

Генерируется nx build (и nx dev для необходимых частей). Он содержит:

  • скомпилированные файлы .nexy в виде пакета Python (__nexy__/src/...);
  • сгенерированные точки входа клиента (main.ts, vite.ts, *.auto.ts);
  • client/ после сборки Vite — ресурсы, манифест, предварительно обработанный HTML;
  • build-cache.json.

Относитесь ко всему каталогу как к одноразовому: удалите его, создайте заново. Редактирование вручную приведет к потере изменений в следующей сборке. Добавьте его в .gitignore.

Следующие шаги

Изменить на GitHub

Enter открывает результат, Esc закрывает.