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

Django+PostgreSQL博客搭建报错:数据库URL解析失败,求助解决

Django + PostgreSQL 博客搭建问题:数据库连接失败与模板配置疑问

问题详情

跟着教程用Django和PostgreSQL搭建基础博客网站,目前遇到两个问题:

  • 数据库无法正常添加,启动服务器时抛出数据库相关错误
  • 已在blog目录下创建templates文件夹,但Django无法识别,不清楚在settings.py中的正确配置方式

服务器原本运行正常,添加templates文件夹并写入教程要求的views.py代码后,启动时出现以下错误:

Traceback (most recent call last):
  File "/workspace/django-blog/manage.py", line 22, in <module>
    main()
  File "/workspace/django-blog/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/workspace/.pyenv_mirror/user/current/lib/python3.12/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/workspace/.pyenv_mirror/user/current/lib/python3.12/site-packages/django/core/management/__init__.py", line 363, in execute
    settings.INSTALLED_APPS
  File "/workspace/.pyenv_mirror/user/current/lib/python3.12/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/workspace/.pyenv_mirror/user/current/lib/python3.12/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/.pyenv_mirror/user/current/lib/python3.12/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitpod/.pyenv/versions/3.12.1/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 994, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/workspace/django-blog/codestar/settings.py", line 91, in <module>
    'default': dj_database_url.parse(os.environ.get("DATABASE_URL"))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/.pyenv_mirror/user/current/lib/python3.12/site-packages/dj_database_url/__init__.py", line 126, in parse
    raise ValueError(
ValueError: No support for 'b'''. We support: cockroach, mssql, mssqlms, mysql, mysql-connector, mysql2, mysqlgis, oracle, oraclegis, pgsql, postgis, postgres, postgresql, redshift, spatialite, sqlite, timescale, timescalegis

教程要求添加的views.py代码如下:

from django.shortcuts import render
from django.views import generic
from .models import Post

# Create your views here.
class PostList(generic.ListView):
    queryset = Post.objects.all()
    template_name = "post_list.html"

解决方案

1. 修复数据库连接错误

错误提示说明DATABASE_URL环境变量为空或格式无效,导致dj_database_url.parse无法解析。可以通过以下方式解决:

方式一:配置正确的环境变量

确保DATABASE_URL设置为符合PostgreSQL格式的字符串,示例:

postgres://用户名:密码@localhost:5432/数据库名

方式二:直接在settings.py中硬编码数据库配置

如果暂时不需要环境变量,可以替换掉settings.py中数据库相关的代码,改用直接配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '你的数据库名称',
        'USER': '数据库用户名',
        'PASSWORD': '数据库密码',
        'HOST': 'localhost',  # 数据库地址,本地开发一般是localhost
        'PORT': '5432',       # PostgreSQL默认端口
    }
}

补充:确保安装PostgreSQL驱动

执行以下命令安装psycopg2(Django连接PostgreSQL所需的驱动):

pip install psycopg2-binary

2. 配置templates文件夹让Django识别

要让Django找到blog目录下的templates文件夹,需要修改settings.py中的TEMPLATES配置:

步骤1:修改TEMPLATES的DIRS项

找到settings.py中的TEMPLATES列表,将DIRS设置为包含blog/templates的路径:

# 用pathlib方式(Django 3.0+推荐)
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'blog' / 'templates'],  # 添加这一行
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

或者用os.path方式:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'blog', 'templates')],
        ...
    },
]

步骤2:确保blog app已添加到INSTALLED_APPS

检查settings.py的INSTALLED_APPS列表,确认包含'blog':

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',  # 确保这一行存在
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:09:56