You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不使用Django模板系统,仅将其作为后端框架使用?

当然可以!用Django做纯后端,前端用JS渲染页面完全可行

这完全匹配你现阶段的学习目标——把Django只当作数据接口提供者,专注练习HTML/CSS/JS的前端能力,完全不需要碰Django模板系统。下面是具体的实现步骤:

1. 用Django编写API接口返回JSON数据

Django可以轻松写出返回JSON格式数据的视图,用来给前端提供数据库查询结果。举个简单的例子:

编写视图函数

# your_app/views.py
from django.http import JsonResponse
from .models import Book  # 假设你有一个Book模型

def get_books(request):
    # 从数据库查询所需数据,只提取需要的字段
    books_queryset = Book.objects.all().values('id', 'title', 'author', 'publication_date')
    # 将查询集转为列表后用JsonResponse返回,safe=False允许返回列表类型
    return JsonResponse(list(books_queryset), safe=False)

配置API路由

把上面的视图映射到一个URL,让前端能访问到:

# your_project/urls.py 或 your_app/urls.py
from django.urls import path
from .views import get_books

urlpatterns = [
    # 前端通过这个URL获取图书数据
    path('api/books/', get_books, name='api_get_books'),
]

2. 前端用JS请求数据并动态渲染HTML

你可以写纯静态的HTML/CSS/JS文件,通过fetch工具请求Django的API,拿到数据后用JS动态生成DOM元素,完全不需要Django模板语法。

示例前端代码

<!-- static/index.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>图书列表</title>
    <style>
        /* 这里专注写你的CSS样式 */
        .book-card {
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            padding: 16px;
            margin: 12px 0;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
        .book-title {
            margin-top: 0;
            color: #2c3e50;
        }
        .book-author {
            color: #7f8c8d;
        }
    </style>
</head>
<body>
    <h1>我的图书库</h1>
    <!-- 用来渲染图书列表的容器 -->
    <div id="book-container"></div>

    <script>
        // 页面加载完成后发起请求
        document.addEventListener('DOMContentLoaded', async () => {
            try {
                // 请求Django的API接口
                const response = await fetch('/api/books/');
                if (!response.ok) {
                    throw new Error('请求失败');
                }
                const books = await response.json();

                // 获取渲染容器
                const container = document.getElementById('book-container');

                // 遍历数据,动态生成DOM元素
                books.forEach(book => {
                    const card = document.createElement('div');
                    card.className = 'book-card';
                    card.innerHTML = `
                        <h2 class="book-title">${book.title}</h2>
                        <p class="book-author">作者:${book.author}</p>
                        <p>出版日期:${book.publication_date}</p>
                    `;
                    container.appendChild(card);
                });
            } catch (error) {
                console.error('加载数据出错:', error);
                // 给用户显示错误提示
                const container = document.getElementById('book-container');
                container.innerHTML = '<p>加载图书数据失败,请稍后重试</p>';
            }
        });
    </script>
</body>
</html>

3. 让Django提供前端静态文件

如果你的前端文件放在Django项目里,需要配置静态文件路径,让Django能正确提供这些文件:

  1. 在settings.py中确保以下配置:
STATIC_URL = 'static/'
STATICFILES_DIRS = [
    BASE_DIR / 'static',  # 项目根目录下的static文件夹
]
  1. 把HTML/CSS/JS文件放到项目根目录的static文件夹,或者对应app的static文件夹中。
  2. 写一个简单的视图返回前端首页(直接返回静态HTML,不用模板语法):
# your_app/views.py
from django.shortcuts import render

def home(request):
    return render(request, 'index.html')

然后在路由中添加首页路由:

path('', views.home, name='home'),

额外说明:跨域问题(如果前端是独立项目)

如果你用单独的前端框架(比如Vue、React)或静态文件服务器运行前端,需要解决跨域问题。可以给Django安装django-cors-headers插件,配置允许前端域名的跨域请求:

  1. 安装:pip install django-cors-headers
  2. 在settings.py中添加中间件和配置:
INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

# 开发环境允许所有域名跨域(生产环境要指定具体域名)
CORS_ALLOW_ALL_ORIGINS = True

这种模式下,你完全不用接触Django模板系统,所有页面渲染逻辑都在前端完成,Django只负责处理数据查询和接口响应,刚好能让你专注夯实HTML/CSS/JS的基础。

内容的提问来源于stack exchange,提问作者TylerMDGL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:35:22