<!-- Generated from ru/llms-txt-django/index.html. The canonical document is the HTML page. -->

- [ Главная ](/ru/) 
/
- [ Как создать ](/ru/how-to-create/) 
/
- Руководство Django            
# `llms.txt` для Django

Четыре подхода для Django: статический файл (отдаваемый через Nginx), простое представление, возвращающее HttpResponse, динамическое представление из моделей базы данных или кэшированное представление для сайтов с высоким трафиком.

Последнее обновление: 22 апреля 2026 г.

На этой странице

- [ Вариант 1: статический файл через STATICFILES_DIRS ](#static)
- [ Вариант 2: пользовательское представление с HttpResponse ](#view)
- [ Вариант 3: динамическая генерация моделями ](#dynamic)
- [ Развёртывание WSGI/ASGI (Gunicorn, uWSGI, Nginx) ](#deployment)
- [ Проверить ](#verify)              
Примечание

Рекомендуемый подход

Используйте  пользовательское представление  (вариант 2) для обслуживания  llms.txt  в корневом пути  /llms.txt . Статический подход (вариант 1)
размещает файл в  /static/llms.txt  
по умолчанию, что противоречит пути, указанному в спецификации.

## Вариант 1: статический файл через STATICFILES_DIRS

Django — это `staticfiles` фреймворк копирует файлы из `STATICFILES_DIRS` в `STATIC_ROOT` при запуске `collectstatic`. Затем можно настроить Nginx на непосредственную отдачу файла, но
учтите, что URL будет находиться в разделе `STATIC_URL` 
префикс (например, `/static/llms.txt`), а не в корне.
static/llms.txt, approach notes    Копировать     

```
# Django static file approach
#
# 1. Place llms.txt in one of your STATICFILES_DIRS:
#    myproject/
#    ├── static/
#    │   └── llms.txt   ← add this
#    └── myapp/
#
# 2. In settings.py, make sure STATICFILES_DIRS includes the static/ folder:
#    STATICFILES_DIRS = [BASE_DIR / "static"]
#
# 3. Run collectstatic to copy it to STATIC_ROOT:
#    python manage.py collectstatic
#
# NOTE: Django's staticfiles serve files under the STATIC_URL prefix (/static/ by default).
# This means the file will be at /static/llms.txt, NOT /llms.txt.
# Use the view approach below to serve at the root path /llms.txt.

```

Чтобы обслуживать по адресу `/llms.txt` из статических файлов настройте Nginx с помощью
`alias` директиву, указывающую на собранный файл в `STATIC_ROOT`. См. фрагмент конфигурации Nginx в разделе о развёртывании ниже.

## Вариант 2: пользовательское представление с HttpResponse

Самый простой подход в Django — минимальное представление, возвращающее содержимое файла с
правильным `content_type`. Это работает с любой целью развёртывания и отдаёт файл
точно по адресу `/llms.txt`.
myapp/views.py    Копировать     

```
# myapp/views.py
from django.http import HttpResponse

LLMS_TXT_CONTENT = """# My Site

> One-sentence description of what my site or product does.

## Documentation

- [Getting Started](https://mysite.com/docs/start/): Install and configure in minutes.
- [API Reference](https://mysite.com/docs/api/): Full endpoint catalog with examples.

## Product

- [Overview](https://mysite.com/product/): Core features and capabilities.
- [Pricing](https://mysite.com/pricing/): Plans and billing details.

## Optional

- [Changelog](https://mysite.com/changelog/): Release history.
- [GitHub](https://github.com/my-org/my-repo): Source code.
"""

def llms_txt(request):
return HttpResponse(
LLMS_TXT_CONTENT,
content_type="text/plain; charset=utf-8",
headers={
"Cache-Control": "public, max-age=3600, stale-while-revalidate=86400",
},
)

```

Подключите это в корневом файле `urls.py`:
myproject/urls.py    Копировать     

```
# myproject/urls.py
from django.urls import path
from myapp.views import llms_txt

urlpatterns = [
# Serve at /llms.txt (root path)
path("llms.txt", llms_txt, name="llms-txt"),
# ... your other URL patterns
]

```

`path("llms.txt", ...)` шаблон (без начального слеша) соответствует URL `/llms.txt`. Django удаляет начальную косую черту перед сопоставлением.

## Вариант 3: динамическая генерация из моделей

Для сайтов, где страницы документации хранятся в базе данных, генерируйте содержимое файла из
queryset. Используйте встроенный `cache_page` декоратор, чтобы не обращаться к базе данных при каждом запросе.
myapp/views.py, dynamic    Копировать     

```
# myapp/views.py
# Dynamic generation from database models
from django.http import HttpResponse
from django.views.decorators.cache import cache_page
from myapp.models import DocumentPage

# Cache for 1 hour, regenerated automatically when cache expires
@cache_page(60 * 60)
def llms_txt(request):
docs = DocumentPage.objects.filter(
published=True,
include_in_llms=True,
).order_by("order").values("title", "slug", "summary")

lines = ["# My Site", "", "> Documentation and API reference.", "", "## Documentation", ""]

for doc in docs:
url = f"https://mysite.com/docs/{doc['slug']}/"
lines.append(f"- [{doc['title']}]({url}): {doc['summary']}")

lines += [
"",
"## Optional",
"",
"- [Changelog](https://mysite.com/changelog/): Release history.",
]

return HttpResponse(
"\n".join(lines),
content_type="text/plain; charset=utf-8",
)

```

Добавьте логическое поле `include_in_llms` передайте вашей модели, чтобы редакторы могли
управлять тем, какие страницы появляются в файле. Запустите [валидатор](/ru/validator/) после любой миграции содержимого, чтобы выявить регрессии форматирования.

Пример

Используйте фреймворк карты сайта как источник данных

Django — это  django.contrib.sitemaps  уже знает, какие страницы существуют и каков их
приоритет. Можно создать экземпляр класса sitemap, получить список URL и передать их в ваше  llms.txt  представление, чтобы два файла автоматически оставались синхронизированными.

## Развёртывание WSGI/ASGI (Gunicorn, uWSGI, Nginx)

Представление Django работает со всеми распространёнными вариантами развёртывания. Само
представление синхронное и лёгкое, асинхронность не требуется.
nginx.conf, proxy to Gunicorn    Копировать     

```
# nginx.conf snippet, proxy to Gunicorn upstream
server {
listen 80;
server_name mysite.com;

# Serve llms.txt directly from Gunicorn (Django view)
location = /llms.txt {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_cache_valid 200 1h;
add_header Cache-Control "public, max-age=3600";
}

# Optionally serve a pre-built static copy faster:
# location = /llms.txt {
#     alias /srv/mysite/static_root/llms.txt;
#     add_header Content-Type "text/plain; charset=utf-8";
# }
}

```

- **Gunicorn**, работает сразу. Представление возвращает 200 с `text/plain`; специальная настройка не требуется. 
- **uWSGI**, как Gunicorn. Если вы используете отдачу статических файлов через
uWSGI, можно сопоставить `/llms.txt` непосредственно к файлу в `STATIC_ROOT` с помощью `static-map = /llms.txt=/path/to/llms.txt`. 
- **ASGI (Daphne, Uvicorn)**, представление совместимо без изменений. Django
автоматически оборачивает синхронные представления в исполнитель потоков. 
- **Кэш Nginx**, добавьте `proxy_cache_valid 200 1h` 
в блоке location Nginx, чтобы кэшировать ответ на уровне прокси и не обращаться к Django при каждом
запросе краулера.   
## Проверить

После развёртывания убедитесь, что файл обслуживается корректно:
Verification    Копировать     

```
curl -I https://mysite.com/llms.txt
# Expected:
# HTTP/2 200
# content-type: text/plain; charset=utf-8

curl https://mysite.com/llms.txt | head -5
# Should print the first lines of your file
```

## Связанные руководства

- [Как создать llms.txt](/ru/how-to-create/), шаблоны и контрольный список. 
- [Справочник формата llms.txt](/ru/llms-txt-format/), подробности спецификации. 
- [Руководство по Express.js](/ru/llms-txt-express/), эквивалентный подход для
Node.js. 
- [Руководство по Laravel](/ru/llms-txt-laravel/), аналогичный подход для PHP. 
- [Валидатор](/ru/validator/) · [Генератор](/ru/generator/).        
## Источники

- [ llmstxt.org, предложение сообщества ](https://llmstxt.org/)
- [ Документация Django, написание представлений ](https://docs.djangoproject.com/en/stable/topics/http/views/)
- [ Документация Django, диспетчер URL ](https://docs.djangoproject.com/en/stable/topics/http/urls/)
